国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【SpringBoot】Maven 版本管理與 flatten-maven-plugin 插件的使用及分析

這篇具有很好參考價(jià)值的文章主要介紹了【SpringBoot】Maven 版本管理與 flatten-maven-plugin 插件的使用及分析。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

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
  • 缺點(diǎn):

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

使用 flatten-maven-plugin 解決這個(gè)問題。

  • 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. 實(shí)例分析

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

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

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

然后看一下其初始項(xiàng)目的版本管理方式:

parent:
.flattened-pom.xml,微服務(wù),Spring Boot,spring boot,maven,java

module:
.flattened-pom.xml,微服務(wù),Spring Boot,spring boot,maven,java

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

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

2.2 再看一下開源項(xiàng)目是怎么進(jìn)行版本管理的

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

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

.flattened-pom.xml,微服務(wù),Spring Boot,spring boot,maven,java

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

.flattened-pom.xml,微服務(wù),Spring Boot,spring boot,maven,java

2.3 改造 pointer-pay

  1. 先看一下原來的項(xiàng)目結(jié)構(gòu):
    .flattened-pom.xml,微服務(wù),Spring Boot,spring boot,maven,java
  2. 然后利用 revision 占位符來統(tǒng)一管理版本:

父工程pom:
.flattened-pom.xml,微服務(wù),Spring Boot,spring boot,maven,java

子工程pom:
.flattened-pom.xml,微服務(wù),Spring Boot,spring boot,maven,java

修改完以后編譯運(yùn)行都沒問題。然后 install、deploy 的時(shí)候就出現(xiàn)問題了:打出來的jar包的pom文件里還是原來的revision變量,下面一起到maven倉庫中查看一下:
.flattened-pom.xml,微服務(wù),Spring Boot,spring boot,maven,java
可見這里識別不出版本號,也就會導(dǎo)致引用方不能識別你的 pom/jar 包。這時(shí) 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)每個(gè)模塊根目錄下多了一個(gè) .flattened-pom.xml 文件,那么這個(gè)玩意是怎么生成的呢?下面一起看一下 updatePomFile 標(biāo)簽,官方文檔是這個(gè)描述的:

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 作為當(dāng)前項(xiàng)目的 pom 文件。默認(rèn)只有打包的時(shí)候(package、install、deploy)會將 .flattened-pom.xml 做為當(dāng)前項(xiàng)目的 pom 文件,但是打包類型 pom 的 pom.xml 中的占位符是不會被替換的。如果想要都被替換,那就將 updatePomFile 的屬性設(shè)置為 true 吧。如果 flattenMode 被設(shè)置為 bom,updatePomFile 默認(rèn)屬性值為 true。

再一起看一下引入 flatten-maven-plugin 之后編譯過的 pom 文件:
.flattened-pom.xml,微服務(wù),Spring Boot,spring boot,maven,java文章來源地址http://www.zghlxwxcb.cn/news/detail-659545.html

到了這里,關(guān)于【SpringBoot】Maven 版本管理與 flatten-maven-plugin 插件的使用及分析的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【springboot-maven項(xiàng)目,java: 錯(cuò)誤: 不支持發(fā)行版本】

    【springboot-maven項(xiàng)目,java: 錯(cuò)誤: 不支持發(fā)行版本】

    運(yùn)行時(shí)報(bào)如下錯(cuò)誤的信息: 圖1:pom.xml里面的jdk與圖2:框架設(shè)置的引用jdk不一致導(dǎo)致。 (創(chuàng)建springboot項(xiàng)目時(shí),選用的jdk版本為21,而后續(xù)不小心修改了框架的jdk版本為11) 圖1 圖2:File Project Structure Modules 因?yàn)閯?chuàng)建此項(xiàng)目時(shí)原因使用的是jdk21,所以將圖二的jdk11改為jdk21,使其一

    2024年02月03日
    瀏覽(24)
  • idea新建Springboot項(xiàng)目,設(shè)置默認(rèn)maven和jdk版本

    idea新建Springboot項(xiàng)目,設(shè)置默認(rèn)maven和jdk版本

    問題: 由于每次新建Springboot項(xiàng)目,maven總是在c盤和jdk版本不是自己需要的版本。每次都需要自己重新配置。 解決: 為了解決這個(gè)問題,設(shè)置新建項(xiàng)目時(shí)指定默認(rèn)配置。 一、設(shè)置新建項(xiàng)目時(shí),默認(rèn)指定的Maven版本 1.file–》Other Settings–》settinf for… 2.找到Maven配置。配置上即

    2024年02月16日
    瀏覽(166)
  • SpringBoot版本與Spring、java、maven、gradle版本對應(yīng)匯總(1->3版本,收藏一波)

    SpringBoot版本與Spring、java、maven、gradle版本對應(yīng)匯總(1->3版本,收藏一波)

    Spring Boot 3.1.x Spring Boot 3.0.x Spring Boot 2.7.x Spring Boot 2.6.x Spring Boot 2.5.x Spring Boot 2.4.x Spring Boot 2.3.x Spring Boot 2.2.x Spring Boot 2.1.x Spring Boot 2.0.x Spring Boot 1.5.x? ?Spring Boot 1.4.x? Spring Boot 1.3.x?? Spring Boot 1.2.x??

    2024年02月03日
    瀏覽(20)
  • [springboot] spring-boot-maven-plugin指定版本問題

    1. pom.xml文件報(bào)如下錯(cuò)誤: (需要指定版本) Plugin \\\'org.springframework.boot:spring-boot-maven-plugin:\\\' not found 解決方法: 打開Maven本地倉庫。查看/org/springframework/boot路徑下的spring-boot-maven-plugin文件夾底下,是否存在與springboot的版本相對應(yīng)版本號,如果存在,添加version標(biāo)簽為自己的sp

    2024年02月13日
    瀏覽(97)
  • spring-Bean管理-springboot原理-Maven高級

    spring-Bean管理-springboot原理-Maven高級

    優(yōu)先級(低→高) application.yaml(忽略) application.yml application.properties java系統(tǒng)屬性(-Dxxx=xxx) 命令行參數(shù)(–xxx=xxx) 1.獲取bean 上述所說的【Spring項(xiàng)目啟動(dòng)時(shí),會把其中的bean都創(chuàng)建好】還會受到作用域及延遲初始化影響,這里主要針對于默認(rèn)的單例非延遲加載的bean而言。 2.bean作用

    2024年02月06日
    瀏覽(20)
  • JavaWeb開發(fā)06-原理-Spring配置優(yōu)先級-Bean管理-SpringBoot原理-Maven繼承和聚合-私服

    JavaWeb開發(fā)06-原理-Spring配置優(yōu)先級-Bean管理-SpringBoot原理-Maven繼承和聚合-私服

    不同配置文件,配置同一個(gè)屬性誰有效 propertiesymlyaml 命令行參數(shù)Java系統(tǒng)屬性 項(xiàng)目打包后要改變屬性: 紅色是Java系統(tǒng)屬性,綠色是命令行參數(shù) ‘ 獲取IOC容器:applicationContext就是IOC容器對象 IOC容器中bean是默認(rèn)單例的只有一個(gè),這樣三個(gè)獲取的bean是同一個(gè) 單例還是多例取決

    2024年04月23日
    瀏覽(20)
  • 基于Springboot+MYSQL+Maven實(shí)現(xiàn)的寵物醫(yī)院管理系統(tǒng)(源碼+數(shù)據(jù)庫+運(yùn)行指導(dǎo)文檔+項(xiàng)目運(yùn)行指導(dǎo)視頻)

    基于Springboot+MYSQL+Maven實(shí)現(xiàn)的寵物醫(yī)院管理系統(tǒng)(源碼+數(shù)據(jù)庫+運(yùn)行指導(dǎo)文檔+項(xiàng)目運(yùn)行指導(dǎo)視頻)

    本項(xiàng)目是一套基于springboot框架實(shí)現(xiàn)的寵物醫(yī)院管理系統(tǒng) 包含:項(xiàng)目源碼、數(shù)據(jù)庫腳本等,該項(xiàng)目附帶全部源碼可作為畢設(shè)使用。 項(xiàng)目都經(jīng)過嚴(yán)格調(diào)試,eclipse或者idea 確保可以運(yùn)行! 該系統(tǒng)功能完善、界面美觀、操作簡單、功能齊全、管理便捷,具有很高的實(shí)際應(yīng)用價(jià)值 j

    2024年02月05日
    瀏覽(59)
  • Springboot 訂餐管理系統(tǒng)idea開發(fā)mysql數(shù)據(jù)庫web結(jié)構(gòu)java編程計(jì)算機(jī)網(wǎng)頁源碼maven項(xiàng)目

    Springboot 訂餐管理系統(tǒng)idea開發(fā)mysql數(shù)據(jù)庫web結(jié)構(gòu)java編程計(jì)算機(jī)網(wǎng)頁源碼maven項(xiàng)目

    一、源碼特點(diǎn) ? springboot 訂餐管理系統(tǒng)是一套完善的信息系統(tǒng),結(jié)合springboot框架和bootstrap完成本系統(tǒng),對理解JSP java編程開發(fā)語言有幫助系統(tǒng)采用springboot框架(MVC模式開發(fā)),系統(tǒng)具有 完整的源代碼和數(shù)據(jù)庫,系統(tǒng)主要采用B/S模式開發(fā)。 前段主要技術(shù) bootstrap.css jquery 后端主

    2024年02月07日
    瀏覽(25)
  • Maven 3-Maven依賴版本沖突的分析及解決小結(jié)

    Maven 3-Maven依賴版本沖突的分析及解決小結(jié)

    舉例 A依賴于B及C,而B又依賴于X、Y,而C依賴于X、M,則A除引B及C的依賴包下,還會引入X,Y,M的依賴包(一般情況下了,Maven可通過scope等若干種方式控制傳遞依賴)。 這里有一個(gè)需要特別注意的,即B和C同時(shí)依賴于X,假設(shè)B依賴于X的1.0版本,而C依賴于X的2.0版本,A究竟依賴

    2024年02月03日
    瀏覽(20)
  • Maven第八章:如何解決Maven的jar版本沖突

    前言 本文重點(diǎn)講解Maven依賴沖突原因,maven依賴原則以及如何利用idea Maven Helper插件分析解決問題。 背景 開發(fā)過程中引入第三方j(luò)ar遇到依賴沖突的,非常影響開發(fā),甚至大部分時(shí)間都在調(diào)試版本兼容。

    2024年02月06日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包