我正在使用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>
...