[英]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.