欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Maven 版本管理與 flatten-maven-plugin 插件的使用解析

 更新時間:2023年07月13日 14:58:06   作者:沒對象的指針  
這篇文章主要介紹了Maven 版本管理與 flatten-maven-plugin 插件的使用解析,本文通過示例代碼給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

1. flatten-maven-plugin 介紹

1.1 環(huán)境

  • IntelliJ IDEA 2021.3
  • JDK 1.8.0_301
  • Apache Maven 3.8.1
  • org.codehaus.mojo:versions-maven-plugin 1.2.7
  • https://www.mojohaus.org/flatten-maven-plugin/

1.2 版本占位符

自 Maven 3.5.0-beta-1 開始,可以使用 ${revision}, ${sha1} and/or ${changelist} 這樣的變量作為版本占位符。

像這樣:

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.apache.maven.ci</groupId>
  <artifactId>ci-parent</artifactId>
  <name>First CI Friendly</name>
  <version>${revision}</version>
  <properties>
	<revision>1.0</revision>
  </properties>
  ...
</project>

或者像這樣:

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.apache.maven.ci</groupId>
  <artifactId>ci-parent</artifactId>
  <name>First CI Friendly</name>
  <version>${revision}${sha1}${changelist}</version>
  ...
  <properties>
    <revision>1.0</revision>
    <changelist>-SNAPSHOT</changelist>
    <sha1/>
  </properties>
</project>

可以使用這樣的命令:

mvn -Drevision=2.7.8 -Dchangelist=-RELEASE -Dsha1=ssbd clean package

缺點:

Install / Deploy 時,版本占位符將不能被替換。這將導(dǎo)致 Install / Deploy 后, maven 不能識別。

使用 flatten-maven-plugin 解決這個問題。

flatten-maven-plugin:

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>flatten-maven-plugin</artifactId>
            <version>${flatten-maven-plugin.version}</version>
            <configuration>
                <updatePomFile>true</updatePomFile>
                <flattenMode>resolveCiFriendliesOnly</flattenMode>
            </configuration>
            <executions>
                <execution>
                    <id>flatten</id>
                    <phase>process-resources</phase>
                    <goals>
                        <goal>flatten</goal>
                    </goals>
                </execution>
                <execution>
                    <id>flatten-clean</id>
                    <phase>clean</phase>
                    <goals>
                        <goal>clean</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

2. 實例分析

2.1 先看一下自己構(gòu)建的項目

基于 COLA 4.X 構(gòu)建一個項目,本人目前正在寫支付中臺,所以就以此為例構(gòu)建 “pointer-pay” 項目:

mvn archetype:generate \
    -DgroupId=com.pointer.pay \
    -DartifactId=pointer-pay \
    -Dversion=1.0.0-SNAPSHOT \
    -Dpackage=com.pointer.pay \
    -DarchetypeArtifactId=cola-framework-archetype-web \
    -DarchetypeGroupId=com.alibaba.cola \
    -DarchetypeVersion=4.3.1

然后看一下其初始項目的版本管理方式:

parent:

module:

可以看到這里的父工程和modules都寫死了版本。當然,像支付中臺或者其他不會變更需求的項目,這個寫也沒什么毛病。

But,在大多數(shù)互聯(lián)網(wǎng)公司中,幾乎每個項目都處在版本快速迭代中,甚至一兩周更新一個小版本,一個月更新一個大版本。如果還是這樣直接寫死版本的話,通常做法就是全局搜索替換版本號,這樣就顯得很撈,也不太科學(xué)。然后就有了revision 的占位符統(tǒng)一管理。

2.2 再看一下開源項目是怎么進行版本管理的

我們可以在 spring-boot 和 spring-cloud-alibaba 的開源項目中看到,其就是利用 revision 占位符來進行統(tǒng)一版本管理的。

https://github.com/spring-projects/spring-boot/blob/2.2.x/pom.xml

https://github.com/alibaba/spring-cloud-alibaba/blob/2021.x/pom.xml

2.3 改造 pointer-pay 先看一下原來的項目結(jié)構(gòu):

然后利用 revision 占位符來統(tǒng)一管理版本:

父工程pom:

子工程pom:

修改完以后編譯運行都沒問題。然后 install、deploy 的時候就出現(xiàn)問題了:打出來的jar包的pom文件里還是原來的revision變量,下面一起到maven倉庫中查看一下:

可見這里識別不出版本號,也就會導(dǎo)致引用方不能識別你的 pom/jar 包。這時 flatten-maven-plugin 就該出場了,在你的父 pom 引入相關(guān)插件:

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>flatten-maven-plugin</artifactId>
            <version>1.2.7</version>
            <configuration>
                <updatePomFile>true</updatePomFile>
                <flattenMode>resolveCiFriendliesOnly</flattenMode>
            </configuration>
            <executions>
                <execution>
                    <id>flatten</id>
                    <phase>process-resources</phase>
                    <goals>
                        <goal>flatten</goal>
                    </goals>
                </execution>
                <execution>
                    <id>flatten-clean</id>
                    <phase>clean</phase>
                    <goals>
                        <goal>clean</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

然后重新 clean、install 一下,你會發(fā)現(xiàn)每個模塊根目錄下多了一個 .flattened-pom.xml 文件,那么這個玩意是怎么生成的呢?下面一起看一下 updatePomFile 標簽,官方文檔是這個描述的:

The flag to indicate if the generated flattened POM shall be set as POM file to the current project. By default this is only done for projects with packaging other than pom. You may want to also do this for pom packages projects by setting this parameter to true or you can use false in order to only generate the flattened POM but never set it as POM file. If flattenMode is set to bom the default value will be true.

大概意思是:updatePomFile 屬性表示是否將生成的 .flattened-pom.xml 作為當前項目的 pom 文件。默認只有打包的時候(package、install、deploy)會將 .flattened-pom.xml 做為當前項目的 pom 文件,但是打包類型 pom 的 pom.xml 中的占位符是不會被替換的。如果想要都被替換,那就將 updatePomFile 的屬性設(shè)置為 true 吧。如果 flattenMode 被設(shè)置為 bom,updatePomFile 默認屬性值為 true。

再一起看一下引入 flatten-maven-plugin 之后編譯過的 pom 文件:

到此這篇關(guān)于Maven 版本管理與 flatten-maven-plugin 插件的使用及分析的文章就介紹到這了,更多相關(guān)Maven 版本管理與 flatten-maven-plugin 插件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring?Boot整合Kafka+SSE實現(xiàn)實時數(shù)據(jù)展示

    Spring?Boot整合Kafka+SSE實現(xiàn)實時數(shù)據(jù)展示

    本文主要介紹了Spring?Boot整合Kafka+SSE實現(xiàn)實時數(shù)據(jù)展示
    2024-06-06
  • java static塊和構(gòu)造函數(shù)的實例詳解

    java static塊和構(gòu)造函數(shù)的實例詳解

    這篇文章主要介紹了java static塊和構(gòu)造函數(shù)的實例詳解的相關(guān)資料,希望通過本文能幫助到大家,讓大家理解掌握Java static關(guān)鍵字的函數(shù)方法,需要的朋友可以參考下
    2017-09-09
  • elasticsearch索引index數(shù)據(jù)功能源碼示例

    elasticsearch索引index數(shù)據(jù)功能源碼示例

    這篇文章主要為大家介紹了elasticsearch索引index功能源碼示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-04-04
  • Java 注解學(xué)習筆記

    Java 注解學(xué)習筆記

    這篇文章主要介紹了Java 注解的相關(guān)資料,幫助大家更好的理解和學(xué)習使用Java,感興趣的朋友可以了解下
    2021-03-03
  • 詳解Java變量與常量

    詳解Java變量與常量

    這篇文章主要介紹了Java變量與常量,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2019-04-04
  • 關(guān)于Mybatis-Plus?Update更新策略問題

    關(guān)于Mybatis-Plus?Update更新策略問題

    這篇文章主要介紹了關(guān)于Mybatis-Plus?Update更新策略問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 詳解Java中如何正確書寫單例模式

    詳解Java中如何正確書寫單例模式

    一般單例都是五種寫法:懶漢,餓漢,雙重校驗鎖,靜態(tài)內(nèi)部類和枚舉。本文整理了幾種常見的單例寫法,下面跟著小編一起來看下吧
    2017-01-01
  • Java實現(xiàn)九宮格的簡單實例

    Java實現(xiàn)九宮格的簡單實例

    這篇文章主要介紹了 Java實現(xiàn)九宮格的簡單實例的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • Java?SpringBoot項目如何優(yōu)雅的實現(xiàn)操作日志記錄

    Java?SpringBoot項目如何優(yōu)雅的實現(xiàn)操作日志記錄

    這篇文章主要介紹了Java?SpringBoot項目如何優(yōu)雅的實現(xiàn)操作日志記錄,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-08-08
  • Java模擬計算機的整數(shù)乘積計算功能示例

    Java模擬計算機的整數(shù)乘積計算功能示例

    這篇文章主要介紹了Java模擬計算機的整數(shù)乘積計算功能,簡單分析了計算機數(shù)值進制轉(zhuǎn)換與通過位移進行乘積計算的原理,并結(jié)合具體實例給出了java模擬計算機成績運算的相關(guān)操作技巧,需要的朋友可以參考下
    2017-09-09

最新評論