? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?原創(chuàng)者:文思
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Spring?boot maven plugin應(yīng)用級詳解
推薦資料地址:
https://docs.spring.io/spring-boot/docs/current/maven-plugin/
https://docs.spring.io/spring-boot/docs/current/reference/html/build-tool-plugins-maven-plugin.html
概覽:
Spring boot maven plugin的五個全局屬性:
1嚼蚀、spring-boot:run
Requires a Maven project to?be executed.需要是一個mave項目禁灼。Requires dependency resolution ofartifacts in scope:?test. 需要在test階段范圍內(nèi)解析工件的依賴性
Since version:?1.1.當前1.1版本
Binds by default to the?lifecycle phase:?validate. 在驗證階段默認情況下綁定到生命周期階段
Invokes the execution of the?lifecycle phase?test-compile?priorto executing itself。調(diào)用生命周期階段執(zhí)行
?2轿曙、 spring-boot:repackage
描述翻譯:
打包成jar或war匾二,打包后并可以使用java -jar命令行執(zhí)行。使用布局=none不設(shè)置時拳芙,可以簡單的打包成一個jar文件并且嵌套著依賴(并且沒有主類,因此不可執(zhí)行)皮璧≈墼可見此屬性可將spring?boot的依賴都打入到j(luò)ar里。
Binds by default to the?lifecycle phase:?package. 打包階段默認情況下綁定到生命周期
默認使用:
當沒有制定finalName時悴务,使用artifactId+version:
3睹限、spring-boot:start
啟動一個Spring應(yīng)用程序。與運行目標相反讯檐,這不會阻塞并允許其他目標在應(yīng)用程序上運行羡疗。此目標通常用于集成測試場景,其中應(yīng)用程序在測試套件之前啟動并在測試結(jié)束后停止别洪。
4叨恨、spring-boot:stop
略
5、spring-boot:build-info
基于文件的當前maven項目生成一個build-info.properties
USAGE:
從這看出repackage應(yīng)該最常用挖垛。想排出一些依賴jar不打進來時痒钝,請參考Exclude屬性。將來會支持maven-war-plugin插件打war包痢毒,目前不支持送矩。
如果打包成zip等非自動運行文件,則必須指程序入口運行的主類:
如果需要配置文件動態(tài)更新哪替,即熱部署栋荸,則使用屬性addResources:
針對打成jar包的應(yīng)用怎么像在本地debug一樣調(diào)試,可參考jvmArguments屬性:
當指定了JVM參數(shù)或代理凭舶,否則運行目標在相同的進程中運行晌块。您可以啟用或禁用屬性斷點。
如果需要對進程進行分叉并調(diào)試它库快,可以添加必要的JVM參數(shù)以啟用遠程調(diào)試摸袁。以下配置暫停進程,直到調(diào)試器連接到端口5005
啟用遠程調(diào)試的執(zhí)行命令:mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"
其它需求參見官網(wǎng)Examples
Spring boot reference中也有對此插件的簡單描述:
用ide工具的maven install打包或者命令行執(zhí)行:mvn package即可打包义屏。
如果不包含< execution />配置靠汁,但又僅僅只配置了repackage時蜂大,可以自己在運行插件。
比如pom中配置成這樣:
雖然也有g(shù)oal:repackage蝶怔,但是外面沒有包含屬性奶浦,則手工命令行執(zhí)行:mvn package spring-boot:repackage,才能將spring boot的依賴包都打進來踢星,只執(zhí)行mvn?package無法將spring boot的依賴jar包打進來澳叉。
在pom中可以指定要打的包類型,jar或者war:
但是若要構(gòu)建一個可執(zhí)行文件并可部署到外部容器中的WAR文件沐悦,則需要將嵌入的其它容器(不需要嵌入其它容器依賴時不用管)的依賴項標記為“provided”成洗,如下所示:
lib-provided下:
如果不標記為provided的話,都會打到lib下:
導致web容器下運行啟動報錯藏否。如果在外部容器下運行瓶殃,應(yīng)用項目本身lib中不需要嵌入其它容器依賴,則建議打包時在pom中去掉容器依賴包: