當(dāng)我們在SpringBoot官方下載一個腳手架時,會發(fā)現(xiàn)pom.xml會自帶spring-boot-maven-plugin插件
(資料圖片僅供參考)
4.0.0 org.springframework.boot spring-boot-starter-parent 2.7.12 com.zhuangpo maven-plugin 0.0.1-SNAPSHOT maven-plugin 1.8 org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-maven-plugin
那為什么會自帶這個插件呢?
我們知道Spring Boot項(xiàng)目,是可以通過java -jar 包名
啟動的
打包命令
mvn clean package
打包成功后就會生成一個jar包
試下是否可以通過java -jar 包名
啟動項(xiàng)目
發(fā)現(xiàn)是可以正常啟動。
這個時候我們?nèi)サ魋pring-boot-maven-plugin插件,通過 mvn clean package
再打一次包。
打包依然成功,包名也一樣,只是jar包大小有著天壤之別
發(fā)現(xiàn)只有3KB,之前的有17.7MB。
我們通過java -jar 包名
看能否啟動成功。
localhost:target xub$ java -jar maven-plugin-0.0.1-SNAPSHOT.jar maven-plugin-0.0.1-SNAPSHOT.jar中沒有主清單屬性
發(fā)現(xiàn)并不能啟動成功,這是為什么呢?
一般的maven項(xiàng)目的打包命令,不會把依賴的jar包也打包進(jìn)去的,只是會放在jar包的同目錄下,能夠引用就可以了。
但是spring-boot-maven-plugin插件,會將依賴的jar包全部打包進(jìn)去。該文件包含了所有的依賴和資源文件,可以直接在命令行或者傳統(tǒng)的 Java Web 服務(wù)器上啟動運(yùn)行。
二、插件介紹1、插件標(biāo)簽詳解 ......
2、內(nèi)部goals該插件提供了7個maven goal
build-image
: 將程序使用 buildpack 打包進(jìn)容器鏡像中。build-info
:生成項(xiàng)目的構(gòu)建信息文件 build-info.propertieshelp
:顯示幫助信息。調(diào)用mvn spring-boot:help -Ddetail=true -Dgoal=以顯示參數(shù)詳細(xì)信息。repackage
:可生成可執(zhí)行的jar包或war包。插件的核心goal。run
:運(yùn)行 Spring Boot 應(yīng)用start
:在集成測試階段,控制生命周期stop
:在集成測試階段,控制生命周期為什么這里插件名稱叫spring-boot?
原因
:自定義插件如果遵循 xxx-maven-plugin 的形式,maven 默認(rèn)會將 maven-plugin 前面的內(nèi)容作為插件前綴。
默認(rèn)情況下,repackage命令所生成的包,會把項(xiàng)目中所有的依賴都打進(jìn)去。
但其實(shí)在項(xiàng)目中scope為provided的依賴,比如 lombok、mybatis-plus等,只作用于編譯階段,編譯完成就沒用了。
若除去provided依賴,可以使用如下的配置:
org.springframework.boot spring-boot-maven-plugin org.projectlombok lombok
2、指定Mainclass類如果未指定,main將使用找到的第一個包含方法的編譯類。
也就是說如果只有一個main方法,那不需要去指定,如果你這個模塊存在兩個主類,那么就需要在插件中指定具體哪個啟動類了。
org.springframework.boot spring-boot-maven-plugin com.zhuangpo.mavenplugin.MavenPluginApplication ZIP
layout 屬性用來指定打成 jar 還是war 文件,可用的值包括:ZIP 、JAR 、WAR、 NONE 。默認(rèn)JAR
3、在使用spring-boot-maven-plugin的下生成普通的jar包前面說了,如果使用該插件,那么打出來的包是一個可執(zhí)行的jar包,這樣的jar包,在被別的項(xiàng)目引用的時候,可能會出問題。
那如何打成一個普通的jar包。
當(dāng)然你可以把這個插件注釋掉,重新打包。不過這樣做未必太愚蠢啦。
解決辦法
第一種:通過命令
mvn clean package -D spring-boot.repackage.skip=true
加上-Dspring-boot.repackage.skip=true參數(shù)即可,此時只會生成一個普通的jar包
第二種:通過配置
org.springframework.boot spring-boot-maven-plugin true
這兩種方式打出來的包就是沒有依賴jar的普通包了。
聲明: 公眾號如需轉(zhuǎn)載該篇文章,發(fā)表文章的頭部一定要 告知是轉(zhuǎn)至公眾號: 后端元宇宙。同時也可以問本人要markdown原稿和原圖片。其它情況一律禁止轉(zhuǎn)載!
關(guān)鍵詞: