将 maven-release-plugin 升级到 2.5.2 后未发布快照版本
snapshot version not published after upgrading maven-release-plugin to 2.5.2
快照版本未发布到快照存储库,而是发布了发布版本。
发布成功。没有错误。
唯一的变化是发布插件从 2.3.2 升级到 2.5.2
也尝试了 2.5.1 和 2.5.3,但 none 有效。
使用 Apache Maven 3.5.0
步骤:
- mvn 全新安装
- mvn release:prepare
- mvn release:perform
输出:在所有三个方面都取得成功
不确定我是否可以附加实际日志
片段pom.xml
<artifactId>maven-clean-plugin</artifactId>
<version>2.5</version>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<artifactId>maven-overview-plugin</artifactId>
<version>1.6</version>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.3</version>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.5</version>
<artifactId>maven-release-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<scmCommentPrefix>: Release by maven </scmCommentPrefix>
<tagNameFormat>bcd-@{project.version}</tagNameFormat>
<arguments>-Denvironment=target</arguments>
</configuration>
<repository>
<id>apache.snapshots</id>
<url>https://repository.apache.org/content/repositories/snapshots</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<distributionManagement>
<repository>
<id>arm</id>
<name>Internal release Repository</name>
<url>url1</url>
</repository>
<snapshotRepository>
<id>arm</id>
<name>Internal Repository</name>
<url>url2</url>
</snapshotRepository>
根据您正在使用的command/goals,这是预期的:
mvn clean install
将您的 SNAPSHOT 依赖项安装到您的本地存储库,但 它不会将其部署到您的 Maven 存储库
mvn release:prepare
更新您的 POM 以获得发布版本并使用标签 更新您的 SCM
mvn release:perform
实际上将您的版本部署到存储库
您的 SNAPSHOT 永远不会部署到任何存储库中。为此,您应该先 运行 deploy:deploy
目标,然后再使用 release:*
目标。例如:
mvn clean install deploy:deploy release:prepare release:perform
相当于:
mvn clean deploy release:prepare release:perform
请注意,您的 pom.xml 和存储库应该正确配置以允许部署 SNAPSHOT 工件。
您的问题是由影响 2.3.2 的 Maven 发布插件中的问题 MRELEASE-812 引起的,自 2.5 起已解决。但是,该插件实际上应该发布您的应用程序的发布版本,而不是快照版本。当你说:
Snapshot version is not published on snapshot repository but release
version is published instead.
使用 Release 插件时,不应将快照版本发布到存储库中。发布版本的发布实际上是预期的。详细解释如下。
当您使用 mvn release:prepare release:perform
时会发生什么:
release:prepare
会将您的项目从版本 x.y.z-SNAPSHOT
更新到 x.y.z
(项目的 "release" 版本)提交+将所有更改推送到您的 Git 存储库(或任何其他 SCM)并创建一个名为 bcd-x.y.z
的标签
release:perform
将从标记的版本 bcd-x.y.z
中 checkout/pull 发布并将其部署到您的存储库中
- 发布版本
x.y.z
现已部署到您的 Repo。
这实际上是您使用 Release 插件 2.5.2 版时发生的情况,并且实际上是预期的正常行为。
这是您使用 2.3.2 版插件时发生的情况:
release:prepare
将您的项目从版本 x.y.z-SNAPSHOT 更新为 x.y.z,即项目的 "release" 版本,但是 由于 MRELEASE-812,更改从未被推送到 Git。因此,使用项目的 x.y.z-SNAPSHOT
版本而不是正确的发布版本创建了标记,因为更新版本号的更改从未被推送。
release:perform
将签出 *错误命名的 * 标签 bcd-x.y.z
实际上包含 x.y.z-SNAPSHOT
版本并将其作为快照部署到您的存储库中。
- 快照版本
x.y.z-SNAPSHOT
现已在您的存储库中可用。
Maven 从未显示任何错误,但这是不正确的行为。您真正的问题实际上是您之前对插件的使用,而您的构建现在具有预期的行为 ;)
你能做什么:
- 我建议您使用最新的插件版本保留您的实际配置。请记住,Maven Release Plugin 用于发布您的应用程序的 releases,而不是快照。
- 如果您想将 SNAPSHOT 版本发布到您的存储库,请在包含 SNAPSHOT 版本的修订版上使用
mvn deploy
而不是创建版本。
希望这对您有所帮助。不要犹豫,询问细节我会更新我的答案。
快照版本未发布到快照存储库,而是发布了发布版本。
发布成功。没有错误。
唯一的变化是发布插件从 2.3.2 升级到 2.5.2
也尝试了 2.5.1 和 2.5.3,但 none 有效。
使用 Apache Maven 3.5.0
步骤:
- mvn 全新安装
- mvn release:prepare
- mvn release:perform
输出:在所有三个方面都取得成功
不确定我是否可以附加实际日志
片段pom.xml
<artifactId>maven-clean-plugin</artifactId>
<version>2.5</version>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<artifactId>maven-overview-plugin</artifactId>
<version>1.6</version>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.3</version>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.5</version>
<artifactId>maven-release-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<scmCommentPrefix>: Release by maven </scmCommentPrefix>
<tagNameFormat>bcd-@{project.version}</tagNameFormat>
<arguments>-Denvironment=target</arguments>
</configuration>
<repository>
<id>apache.snapshots</id>
<url>https://repository.apache.org/content/repositories/snapshots</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<distributionManagement>
<repository>
<id>arm</id>
<name>Internal release Repository</name>
<url>url1</url>
</repository>
<snapshotRepository>
<id>arm</id>
<name>Internal Repository</name>
<url>url2</url>
</snapshotRepository>
根据您正在使用的command/goals,这是预期的:
mvn clean install
将您的 SNAPSHOT 依赖项安装到您的本地存储库,但 它不会将其部署到您的 Maven 存储库mvn release:prepare
更新您的 POM 以获得发布版本并使用标签 更新您的 SCM
mvn release:perform
实际上将您的版本部署到存储库
您的 SNAPSHOT 永远不会部署到任何存储库中。为此,您应该先 运行 deploy:deploy
目标,然后再使用 release:*
目标。例如:
mvn clean install deploy:deploy release:prepare release:perform
相当于:
mvn clean deploy release:prepare release:perform
请注意,您的 pom.xml 和存储库应该正确配置以允许部署 SNAPSHOT 工件。
您的问题是由影响 2.3.2 的 Maven 发布插件中的问题 MRELEASE-812 引起的,自 2.5 起已解决。但是,该插件实际上应该发布您的应用程序的发布版本,而不是快照版本。当你说:
Snapshot version is not published on snapshot repository but release version is published instead.
使用 Release 插件时,不应将快照版本发布到存储库中。发布版本的发布实际上是预期的。详细解释如下。
当您使用 mvn release:prepare release:perform
时会发生什么:
release:prepare
会将您的项目从版本x.y.z-SNAPSHOT
更新到x.y.z
(项目的 "release" 版本)提交+将所有更改推送到您的 Git 存储库(或任何其他 SCM)并创建一个名为bcd-x.y.z
的标签
release:perform
将从标记的版本bcd-x.y.z
中 checkout/pull 发布并将其部署到您的存储库中- 发布版本
x.y.z
现已部署到您的 Repo。
这实际上是您使用 Release 插件 2.5.2 版时发生的情况,并且实际上是预期的正常行为。
这是您使用 2.3.2 版插件时发生的情况:
release:prepare
将您的项目从版本 x.y.z-SNAPSHOT 更新为 x.y.z,即项目的 "release" 版本,但是 由于 MRELEASE-812,更改从未被推送到 Git。因此,使用项目的x.y.z-SNAPSHOT
版本而不是正确的发布版本创建了标记,因为更新版本号的更改从未被推送。release:perform
将签出 *错误命名的 * 标签bcd-x.y.z
实际上包含x.y.z-SNAPSHOT
版本并将其作为快照部署到您的存储库中。- 快照版本
x.y.z-SNAPSHOT
现已在您的存储库中可用。
Maven 从未显示任何错误,但这是不正确的行为。您真正的问题实际上是您之前对插件的使用,而您的构建现在具有预期的行为 ;)
你能做什么:
- 我建议您使用最新的插件版本保留您的实际配置。请记住,Maven Release Plugin 用于发布您的应用程序的 releases,而不是快照。
- 如果您想将 SNAPSHOT 版本发布到您的存储库,请在包含 SNAPSHOT 版本的修订版上使用
mvn deploy
而不是创建版本。
希望这对您有所帮助。不要犹豫,询问细节我会更新我的答案。