使用flatten-maven-plugin出現問題后引發的maven學習


一、maven的基礎學習

      maven的基本知識這里就不過多講解,詳細可以看看這個文章,文章中把idea上maven插件為什么lifecycle和plugins都有同樣的操作,以及maven lifecycle每個階段執行的goals和phrase都列得非常清楚。

      https://blog.csdn.net/qq_40761462/article/details/122995852?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~aggregatepage~first_rank_ecpm_v1~rank_v31_ecpm-1-122995852.pc_agg_new_rank&utm_term=idea%E4%B8%ADmaven%E9%87%8C%E7%9A%84lifecycle%E5%92%8Cplugin&spm=1000.2123.3001.4430

 

二、使用flatten-maven-plugin

     這個插件的使用也不過多解說,主要是用來做maven parent項目的版本以及子模塊版本參數化,主要用來修改一處變量,子模塊都同步。用法參考該文檔:

     https://zhuanlan.zhihu.com/p/270574226

 

三、實戰后出現問題

     實際就是使用${revision},替換project下的version,子模塊的parent項目也用變量代替。

     使用該插件的時候,卻出現一些問題,執行mvn complie具體報錯信息如下:

    

     [INFO] --- maven-enforcer-plugin:1.4.1:enforce (enforce) @ sl-saas-member-common ---

    [WARNING] Rule 1: org.apache.maven.plugins.enforcer.RequireNoRepositories failed with message:

     com.shopline.saas:sl-saas-member:pom:${revision}

    看到這個報錯信息,下意識的就以為是flatten替換不成功,所以又去查了一下 flatten-maven-plugin的實現原理,其實就是在模塊下生成.flattened-pom.xml里面是變量替換為具體版本的pom文件,在編譯構建的時候,maven不讀pom.xml而去讀取.flattened-pom.xml的內容完成構建。

    這時候我就去看每個子模塊,發現除了整個project和子模塊starter下的pom.xml,有生成.flattened-pom.xml外,其他都沒有,就以為是項目結構問題,其他子模塊沒生成.flattened-pom.xml導致讀取的還是原來pom.xml的${revision}。

    這個錯誤的思路一直讓我查不到正確的解決方法,查閱的資料也離正確解決方法越行越遠,也搗騰了idea上maven插件下,發現lifecycle和plugins都有一樣的操作

    鑒於本人maven基礎也不扎實,所以我就去補習了一下maven基礎,得知maven構建分了好幾個生命階段,clean -> validate -> compile -> test -> package -> verify -> install -> site -> deploy。

    同時也知道了flatten-maven-plugin配置中的execution,實際上就是在mvn命令構建時,不同生命周期goals實現哪些操作,比如clean的時候也把.flattened-pom.xml刪除。

    我就開始一步步執行看看具體是哪一步出現問題,clean完成后,發現在validate階段就出現報錯了,而validate主要是用來做一些校驗,仔細一查看報錯信息,發現maven-enforcer-plugin:1.4.1這個插件的報錯。而這插件一查,發現是用來校驗依賴版本是否有沖突的,好像默認就會執行,導致后面階段,還沒執行到flatten-maven-plugin當然就沒有.flattened-pom.xml了。

    如何去掉這個插件呢?好像也沒什么辦法,但能通過maven命令執行的時候進行skip跳過,mvn clean install -DskipTests  -Denforcer.skip=true,這樣運行,就成功compile和install還有deploy了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM