Spring Boot 打包本地 .jar 檔案
阿新 • • 發佈:2019-01-03
零、問題描述
最近的 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
。