官方文檔
java本身比較難做到j(luò)ar包包含自己依賴的jar包,springboot可通過maven插件解決這個問題。
1 加入 spring-boot-maven-plugin 依賴到您的pom
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
說明:還有一些其他需要的配置已經(jīng)被 spring-boot-starter-parent幫忙配置了,如果您沒有使用它,您需要自己配置
2 執(zhí)行命令 mvn package,控制臺會輸出
$ mvn package
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building myproject 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] .... ..
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ myproject ---
[INFO] Building jar: /Users/developer/example/spring-boot-example/target/myproject-0.0.1-SNAPSHOT.jar
[INFO]
[INFO] --- spring-boot-maven-plugin:2.1.3.RELEASE:repackage (default) @ myproject ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
注意:這里已經(jīng)是運行的 repackage命令了
這個時候你會在 target目錄下面發(fā)現(xiàn)兩個包,myproject-0.0.1-SNAPSHOT.jar包是剛剛用repackage命令打出來的包,myproject-0.0.1-SNAPSHOT.jar.original包是package打出來的原始的包。前者是可以直接運行的:java -jar target/myproject-0.0.1-SNAPSHOT.jar
$ java -jar target/myproject-0.0.1-SNAPSHOT.jar
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.1.3.RELEASE)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Example in 2.536 seconds (JVM running for 2.864)
您可以使用jar tvf myproject-0.0.1-SNAPSHOT.jar 去查看這兩個包的結(jié)構(gòu),您會發(fā)現(xiàn)最大的區(qū)別是 repackage打出來的包在lib目錄下已經(jīng)引入了您pom中引入的其他依賴包。
下一章 五 spring-boot-starter-parent