最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解決SpringCloud下spring-boot-maven-plugin插件的打包問(wèn)題

 更新時(shí)間:2023年03月28日 15:19:01   作者:逐知逐行  
這篇文章主要介紹了SpringCloud下spring-boot-maven-plugin插件的打包問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

一、Maven生命周期、階段、目標(biāo)         

 之前一直對(duì)Maven的3套生命周期有點(diǎn)不清楚,記錄下自己的理解。
        生命周期,就是一個(gè)事物從初始到消亡、開(kāi)始到結(jié)束的過(guò)程,而Maven的生命周期就是指Maven官方對(duì)項(xiàng)目執(zhí)行Maven構(gòu)建從開(kāi)始使用到使用結(jié)束整個(gè)流程的定義。
        而所說(shuō)的Mavn有3套生命周期,就是指Maven從開(kāi)始使用到使用結(jié)束要經(jīng)過(guò)3個(gè)生命周期的流程,這3個(gè)生命周期各自獨(dú)立的,依次經(jīng)過(guò)的生命周期分別是 clean、default、site,每個(gè)生命周期流程中也包含了不同的 phase(或者稱作階段),這些階段也是有先后順序的??梢哉f(shuō)3套生命周期就是對(duì)這些階段做的一個(gè)邏輯上劃分、分類。

  • clean生命周期:因?yàn)轫?xiàng)目如果是已經(jīng)有部署過(guò)的話,我們肯定是要先把已經(jīng)編譯生成好的文件,要先清除掉。
  • default生命周期:然后執(zhí)行一些測(cè)試、編譯等步驟,default才是我們的重點(diǎn),也是包含了最多的階段。
  • site生命周期:最終發(fā)布到服務(wù)器上。        

        這樣最終就形成了3套生命周期。當(dāng)然以上的生命周期、階段其實(shí)都是Maven官方自己所定義的一些邏輯上Maven項(xiàng)目應(yīng)該經(jīng)過(guò)的流程,并不一定每個(gè)項(xiàng)目都會(huì)經(jīng)過(guò)這些所有的流程。而且用戶可以通過(guò)自定義插件的方式,來(lái)將插件綁定到各個(gè)階段,當(dāng)我們?cè)贛aven執(zhí)行命令的時(shí)候,就會(huì)執(zhí)行自定義的特殊業(yè)務(wù)。
        比如對(duì)于spring-boot-maven-plugin,這個(gè)插件,我們使用這個(gè)插件的時(shí)候可以自定義該插件的phase為pre-clean。

         mvn執(zhí)行階段的命令格式是:mvn 階段1 [階段2] [階段n]。那么當(dāng)執(zhí)行mvn pre-clean命令,就會(huì)執(zhí)行pre-clean階段的流程,該流程在maven官方應(yīng)該是沒(méi)有執(zhí)行任務(wù)邏輯的。我們可以對(duì)比下對(duì)一個(gè)項(xiàng)目執(zhí)行pre-clean和clean的差別:只有clean的時(shí)候才多了實(shí)執(zhí)行的delete的操作。

        但是我們?cè)O(shè)置了這個(gè)<phase>pre-clean</phase>綁定后,我們執(zhí)行pre-clean命令,自然就會(huì)執(zhí)行到spring-boot-maven-plugin這個(gè)插件的邏輯。這里只是為了演示有綁定了pre-clean階段的動(dòng)作,實(shí)際項(xiàng)目上是不應(yīng)該綁定到pre-clean階段上的。

         并且在一個(gè)階段上也可以指定不同的goal/目標(biāo)(可以稱之為這個(gè)插件所提供的功能),一個(gè)插件可以提供多種不同的goal/目標(biāo)/功能,在IDEA的Maven控制面板上打開(kāi)該pom項(xiàng)目,可以看到這個(gè)spring-boot插件就是包含了這些目標(biāo):build-info、help、repackage、run、start、stop。

        而我們上面配置了<goal>repackage</goal>,意味著在執(zhí)行pre-clean階段的時(shí)候,會(huì)實(shí)際執(zhí)行到該插件的repackage這個(gè)目標(biāo)??梢钥吹綀?zhí)行mvn pre-clean的結(jié)果,這個(gè)就是執(zhí)行了repackage目標(biāo)。在執(zhí)行mvn命令可以指定要執(zhí)行的目標(biāo),所以上面相當(dāng)于執(zhí)行了:mvn pre-clean:repackage

         在clean這個(gè)生命周期中,Maven總共定義了三個(gè)階段,分別是:pre-clean、clean、post-clean,各個(gè)階段有先后順序,執(zhí)行某個(gè)階段的時(shí)候會(huì)有序執(zhí)行其前面的所有階段。比如執(zhí)行mvn post-clean,則依次執(zhí)行pre-clean、clean、post-clean??梢钥吹疆?dāng)我們執(zhí)行mvn post-clean的時(shí)候,也會(huì)出現(xiàn)了上面那樣pre-clean時(shí)的錯(cuò)誤

         當(dāng)我們?cè)谑褂迷摬寮臅r(shí)候,沒(méi)有定義phase的話,會(huì)自動(dòng)使用其插件定義的時(shí)候用的defaultPhase。比如我們使用的spring-boot-maven-plugin沒(méi)有配置phase,則默認(rèn)的phase是插件源碼RepackageMojo在@Mojo定義的參數(shù)defaultPhase,也就是package階段了。所以我們只要增加了goal的配置,即使沒(méi)有配置pahse,也可以在package階段直接打包了

 二、SpringCloud下spring-boot-maven-plugin插件的打包的問(wèn)題

        在SpringCloud項(xiàng)目中的spring-boot-maven-plugin配置如下:

         當(dāng)我們直接在SpringCloud項(xiàng)目下,對(duì)各個(gè)微服務(wù)子項(xiàng)目直接用命令mvn clean package打包會(huì)發(fā)現(xiàn)最終打出來(lái)的jar包并非可執(zhí)行jar包,而只是我們項(xiàng)目源文件的普通jar包。

         正確的打包命令應(yīng)該是mvn clean package spring-boot:repackage,打包結(jié)果如下圖。其中.original結(jié)尾的文件,就是項(xiàng)目源代碼最初的jar包,然后springboot打包插件再根據(jù)該jar包再生成最終的可執(zhí)行jar包。

三、SpringCloud正確的打包方式

        為什么SpringCloud工程打可執(zhí)行jar的命令是:mvn clean package spring-boot:repackage,而那些繼承了spring-boot-starter-parent的項(xiàng)目可以直接通過(guò)mvn clean package就可以打可執(zhí)行jar包?

        這是因?yàn)樵趕pring-boot-starter-parent的項(xiàng)目里已經(jīng)幫我們將打包插件綁定到了repackage的目標(biāo),而該插件如上文所提到的,已經(jīng)默認(rèn)綁定到了package的階段,所以當(dāng)我們?cè)赟pringBoot項(xiàng)目執(zhí)行mvn clean package的時(shí)候其實(shí)就自動(dòng)執(zhí)行了打普通jar包、并且通過(guò)repackage最終打成可執(zhí)行jar包的流程。

         所以如果我們的SpringCloud想要也能夠像SpringBoot那樣執(zhí)行打包命令的話,可以在SpringCloud的父pom工程也定義好plugin的repackage目標(biāo):

         這樣在子工程執(zhí)行package后,就可以發(fā)現(xiàn)已經(jīng)可以自動(dòng)執(zhí)行打普通jar包的目標(biāo)了,接著繼續(xù)執(zhí)行repackage目標(biāo),最終就是我們所要的可執(zhí)行jar包。

         如果只是單獨(dú)執(zhí)行mvn spring-boot:repackage,會(huì)報(bào)錯(cuò):Source file must be provided。需要先package 與 spring-boot:repackage 在同一條命令執(zhí)行才正確,可能插件內(nèi)部是在通過(guò)本次命令執(zhí)行中,根據(jù)package打出來(lái)的普通jar包的基礎(chǔ)上進(jìn)行repackage的,不會(huì)去獲取倉(cāng)庫(kù)中已有的普通jar包。

到此這篇關(guān)于SpringCloud下spring-boot-maven-plugin插件的打包問(wèn)題的文章就介紹到這了,更多相關(guān)spring-boot-maven-plugin插件打包內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

白山市| 依兰县| 昌黎县| 龙川县| 江川县| 三都| 磴口县| 巴彦县| 依兰县| 临城县| 密云县| 湟源县| 定日县| 澄江县| 齐河县| 穆棱市| 临城县| 江安县| 濮阳县| 襄垣县| 日喀则市| 阜康市| 遂宁市| 乐陵市| 黎城县| 左贡县| 青浦区| 尖扎县| 光山县| 中西区| 石台县| 铜川市| 微山县| 凌海市| 揭阳市| 井陉县| 绵阳市| 泰安市| 双柏县| 德惠市| 临邑县|