零、问题描述
最近的 APP 项目接支付宝支付,遇到个问题就是,支付宝的 SDK 竟然没有放在 Maven 仓库里,而是要独立下载 jar 文件,醉醉的。
文件名是:alipay-sdk-java20170829142630.jar
放在了项目根目录的 /lib/
目录下。
写在 pom.xml
文件中如下:
<!-- alipay -->
<dependency>
<groupId>com.alipay</groupId>
<artifactId>alipay-sdk</artifactId>
<version>java20170829142630</version>
<scope>system</scope>
<systemPath>${basedir}/lib/alipay-sdk-java20170829142630.jar</systemPath>
</dependency>
然而,项目最后打包成 可执行jar
的时候,支付宝的 jar 包并没有被打包进来,执行时报类未找到异常。
一、解决方案
在 Spring Boot 项目中,默认是使用 spring-boot-maven-plugin
插件来打包成 可执行jar
的。其实很简单,加一个配置即可。
默认是:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
开启 includeSystemScope
配置后即可:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
二、其他
Maven pom.xml 文件对本地 jar 包的依赖声明,貌似一点也不严格,只要声明了 scope
和 systemPath
即可,其他的 groupId
artifactId
version
都无关紧要,只要 systemPath
能找到 jar 文件就行了。
不过即使如此,dependency
中的 artifactId
和 version
还是要好好写,因为打包进可执行 .jar 文件后,该 jar 文件名会变成:{artifactId}-{version}.jar
。