![](/img/trans.png)
[英]Versions Maven Plugin: package not found after versions:use-latest-versions
[英]Why Maven Versions Plugin (versions:use-latest-versions) not updating/changing -SNAPSHOT version to release (none -SNAPSHOT version)?
我正在使用Version Maven插件插件使用最新版本功能將groupID = com.example *內部依賴版本更新到最新版本。 這是使用Jenkins作為CI系統的一部分執行的。
當開發人員開始處理新功能時,他們會分支代碼,在分支上工作,當新功能實現(或部分實現)時,代碼將合並回主干(通常每周多次)。
分支版本更新:
mvn -P snapshot -B versions:use-latest-versions versions:update-properties -Dincludes=com.example* -DexcludeReactor=false -DallowSnapshots=true ...
中繼版本更新:
mvn -P production -B versions:use-latest-versions versions:update-properties -Dincludes=com.example* -DexcludeReactor=false ...
有時分支構建會將com.example *依賴版本更新為“...- SNAPSHOT”版本(這是正常的,因為libs-snapshot Artifactory repo用作可以具有-SNAPSHOT依賴版本的依賴庫)。 這些版本更新將檢查回源代碼控制(svn)。
當代碼(包括pom.xml版本更新更改)從分支合並回主干並執行主干構建時,所有com.example *內部依賴版本都應更改/更新為最新版本。 但由於某些原因,依賴版本在其版本中具有“-SNAPSHOT” :use-latest-versions不會將版本更改/更新為最新版本(無-SNAPSHOT)版本。
例:
Artifactory repos有流動的版本:
使myApp分支構建將從libs-snapshot獲取依賴版本並將com.example:myLib版本更新為1.1.11-SNAPSHOT並將此更新檢查回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
工具配置:
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.3
)。 我相信2.3
修復了一些問題 (據說它仍然是一個令人難以置信的錯誤插件)。
我在版本插件中發現的另一個問題是與其他版本目標甚至其他maven目標相結合。 不要那樣做。 例如,您上面的代碼正在運行versions:use-latest-versions versions:update-properties
。 而是為每個目標執行一次mvn
。 是的,這是一個痛苦,並減慢了構建過程,但我發現它更可靠, 特別是如果您使用版本:更新 - 父 (2.3可能已修復這些問題)。
我也認為excludeReactor
一般都被打破了 。 如果您在聚合項目上運行版本更新,我不建議它。 而是轉到每個子模塊並運行命令。
你必須做兩個步驟:
mvn versions:use-releases
(這會將所有SNAPSHOT更改為發布版本) mvn versions:use-latest-release
(這會將當前版本更改為最新的可用版本) 我認為文檔中有錯誤。
http://www.mojohaus.org/versions-maven-plugin/examples/advancing-dependency-versions.html
文件:
versions:use-latest-releases
在pom中搜索所有非SNAPSHOT版本,這些版本是較新版本,並將其替換為最新版本。
與下面的目標矩陣沖突。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.