SpringBoot应用部署 - 使用第三方JAR包

在项目中我们经常需要使用第三方的Jar,比如某些SDK,这些SDK没有直接发布到公开的maven仓库中,这种情况下如何使用这些三方JAR呢?本文提供最常用的两种方式。@pdai

方案一:安装到Maven仓库

如果有项目的Maven仓库,则推荐按照到的Maven仓库(比如私服)中。(最好不是本地的Maven仓库,因为还有CI环境需要集成。)

配置Maven私服, server & profile

<!-- server -->
<server>
    <id>nexus</id>
    <username>pdai</username>
    <password>passw0rd</password>
</server>
<!-- profile -->
<profile>
    <id>pdai-artifactory</id>
    <repositories>
        <repository>
            <id>nexus</id>
            <url>xxx.xxx.xxx.xxx</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>
</profile>
# -X:详细信息输出用于调试
# -Dfile:本地jar路径
# gav: group, artifactId, verson
# -Durl:仓库地址
# -DrepositoryId:settings文件中的ID
mvn -X deploy:deploy-file -DgroupId=tech.pdai -DartifactId=test-xxx -Dversion=1.1.0 -Dpackaging=jar -Dfile=/xxxx/xxx.jar -Durl=http://nexus.pdai.tech/repository/releases/ -DrepositoryId=nexus

方案二:使用systemPath属性

如果Jar无法放到maven仓库,即放在项目代码中,比如项目中libs文件夹中

使用systemPath属性,<scope>system</scope>, 其它gav三元组是可以随意填写的。

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>taobao-sdk-java</artifactId>
    <version>1.0.0</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/libs/taobao-sdk-java-auto_1479188381469-20180831.jar</systemPath>
</dependency>
  • SpringBoot JAR打包

springboot在打包的时候,调用spring-boot-maven-plugin,执行repackage把tomcat和resource,lib等合成一个新的jar。想要将系统jar打进去,必须配置includeSystemScope。最终会将lib放入BOOT-INF\lib

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <includeSystemScope>true</includeSystemScope>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>build-info</goal>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
  • SpringBoot War打包

使用mvn clean package命令打包时需要在pom文件加入以下webResources配置,并设置jar包在WEB-INF/lib目录下

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <webResources>
            <resource>
                <directory>src/main/resources/libs/</directory>
                <targetPath>WEB-INF/lib/</targetPath>
                <includes>
                    <include>**/*.jar</include>
                </includes>
            </resource>
        </webResources>
    </configuration>
</plugin>