1. 程式人生 > >Spring Boot 打包本地 .jar 檔案

Spring Boot 打包本地 .jar 檔案

零、問題描述

最近的 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 包的依賴宣告,貌似一點也不嚴格,只要聲明瞭 scopesystemPath 即可,其他的 groupId artifactId version 都無關緊要,只要 systemPath 能找到 jar 檔案就行了。

不過即使如此,dependency 中的 artifactIdversion 還是要好好寫,因為打包進可執行 .jar 檔案後,該 jar 檔名會變成:{artifactId}-{version}.jar