2016-04-04 100 views
3

我正在使用Version Maven Plugin插件use-latest-versions功能將groupID = com.example *內部依賴項版本更新爲最新版本。這是作爲我們使用Jenkins的CI系統的一部分執行的。爲什麼Maven版本插件(版本:使用最新版本)不更新/更改-SNAPSHOT版本發佈(無-SNAPSHOT版本)?

當開發人員開始研究新功能時,他們分支代碼,在分支上工作,當新功能實現(或部分實現)時,代碼會合並回主幹(通常每週多次)。

分行版本更新:

  • 使用 「快照」 的個人資料。請參見下面的pom.xml快照配置文件配置和Artifactory的回購配置
  • 命令用來更新版本:mvn -P snapshot -B versions:use-latest-versions versions:update-properties -Dincludes=com.example* -DexcludeReactor=false -DallowSnapshots=true ...

主幹版本更新:

  • 使用 「生產」 的個人資料。請參見下面的pom.xml生產配置文件配置和Artifactory的配置
  • 命令用來更新版本:mvn -P production -B versions:use-latest-versions versions:update-properties -Dincludes=com.example* -DexcludeReactor=false ...

有時分支建立更新com。示例*依賴版本「...-快照」的版本(這是正常的因爲libs-snapshot Artifactory repo被用作可以具有-SNAPSHOT依賴版本的依賴庫。這些版本更新被檢查回到源代碼控制(svn)。

當代碼(包括pom.xml版本更新更改)從分支合併回trunk並執行trunk構建時,所有的com.example *內部依賴項版本都應該更改/更新爲最新版本。但由於某些原因,依賴項版本中有「-SNAPSHOT」版本:版本:使用最新版本未更改/將版本更新爲最新版本(無-SNAPSHOT)版本。


實施例:

Artifactory的回購具有流動版本:

  • 庫快照具有 「com。示例:MYLIB:1.1.10-快照」,「com。示例:MYLIB:1.1.11-快照」
  • 庫釋放具有 「com。示例:MYLIB:1.1.9」, 「com。示例:MYLIB:1.1.12」

使對myApp分支機構建立將會從庫的快照和更新com。示例依賴版本:MYLIB版本1.1.11的快照和檢查此更新回SVN

...  
    <dependency> 
     <groupId>com.example</groupId> 
     <artifactId>myLib</artifactId> 
     <version>1.1.11-SNAPSHOT</version> 
    </dependency> 
... 

代碼合併到主幹,包括上述依賴版本更改並運行中繼版本(包括版本更新)mvn -P production -B versions:use-latest-versions...不會將com.example:myLib版本更改爲1.1。12


Artifactory的配置:

  • 本地回購:庫快照本地(開發庫); libs-release-local(發行版本庫)
  • 虛擬回收:libs-snapshot(包括libs-snapshot-local,libs-release-local和remote-repos);庫釋放(包括庫釋放的本地和遠程回購)

pom.xml的配置:

... 
<profiles> 
    <profile> 
     <id>snapshot</id> 
     <distributionManagement> 
      <repository> 
       <id>libs-snapshot-local</id> 
       <name>Internal Applications Snapshot Repository</name> 
       <url>http://example.com/artifactory/libs-snapshot-local</url> 
      </repository> 
     </distributionManagement> 

     <repositories> 
      <repository> 
       <snapshots> 
        <enabled>true</enabled> 
        <updatePolicy>always</updatePolicy> 
       </snapshots> 
       <id>libs-snapshot</id> 
       <name>libs-snapshot</name> 
       <url>http://example.com/artifactory/libs-snapshot</url> 
       <releases> 
        <enabled>true</enabled> 
        <updatePolicy>always</updatePolicy> 
       </releases> 
      </repository> 
      <repository> 
       <snapshots> 
        <enabled>false</enabled> 
       </snapshots> 
       <id>libs-release</id> 
       <name>libs-release</name> 
       <url>http://example.com/artifactory/libs-release</url> 
       <releases> 
        <enabled>true</enabled> 
        <updatePolicy>always</updatePolicy> 
       </releases> 
      </repository> 
     </repositories> 

     <build> 
      ... 
     </build> 
    </profile> 

    <profile> 
     <id>production</id> 

     <distributionManagement> 
      <repository> 
       <id>libs-release-local</id> 
       <name>Internal Applications Snapshot Repository</name> 
       <!-- Artifacts are promoted to libs-release-local not deployed directly --> 
       <url>http://example.com/artifactory/libs-snapshot-local</url> 
      </repository> 
     </distributionManagement> 

     <repositories> 
      <repository> 
       <snapshots> 
        <enabled>false</enabled> 
       </snapshots> 
       <id>libs-release</id> 
       <name>libs-release</name> 
       <url>http://example.com/artifactory/libs-release</url> 
       <releases> 
        <enabled>true</enabled> 
        <updatePolicy>always</updatePolicy> 
       </releases> 
      </repository> 
     </repositories> 

     <build> 
      ... 
     </build> 
    </profile> 

</profiles> 

...

回答

2

你應該確保你使用最新版本的插件(2.3)。我相信2.3fixed some issues(這是說它仍然是一個令人難以置信的錯誤插件)。

我在版本插件中發現的另一個問題是與其他版本目標或其他Maven目標相結合。不要這樣做。例如,您上面的代碼同時運行versions:use-latest-versions versions:update-properties。相反,爲每一個目標執行一次mvn。是的,這是一個痛苦,並減緩構建過程,但我發現它更可靠特別是如果你使用版本:更新父母(2.3可能已經修復了這些問題,雖然)。

我也覺得excludeReactor is generally broken。如果您在彙總項目上運行版本更新,我不推薦它。而是轉到每個子模塊並運行命令。

0

你必須做2步:

  1. MVN版本:使用-版本(這將改變所有快照發布版本)
  2. MVN版本:用最新的釋放(這將改變當前的發佈版本到最新的可用發佈版本)

我認爲在文檔中有錯誤。

http://www.mojohaus.org/versions-maven-plugin/examples/advancing-dependency-versions.html

的文檔:

版本:用最新的發佈版搜索這是一個較新的版本,並與最新發行版本替換它們所有非快照版本的POM。

與下面的目標矩陣發生衝突。

相關問題