将 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

步骤:

输出:在所有三个方面都取得成功

不确定我是否可以附加实际日志

片段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 时会发生什么:

  1. release:prepare 会将您的项目从版本 x.y.z-SNAPSHOT 更新到 x.y.z(项目的 "release" 版本)提交+将所有更改推送到您的 Git 存储库(或任何其他 SCM)并创建一个名为 bcd-x.y.z
  2. 的标签
  3. release:perform 将从标记的版本 bcd-x.y.z 中 checkout/pull 发布并将其部署到您的存储库中
  4. 发布版本 x.y.z 现已部署到您的 Repo。

这实际上是您使用 Release 插件 2.5.2 版时发生的情况,并且实际上是预期的正常行为。

这是您使用 2.3.2 版插件时发生的情况:

  1. release:prepare 将您的项目从版本 x.y.z-SNAPSHOT 更新为 x.y.z,即项目的 "release" 版本,但是 由于 MRELEASE-812,更改从未被推送到 Git。因此,使用项目的 x.y.z-SNAPSHOT 版本而不是正确的发布版本创建了标记,因为更新版本号的更改从未被推送。
  2. release:perform 将签出 *错误命名的 * 标签 bcd-x.y.z 实际上包含 x.y.z-SNAPSHOT 版本并将其作为快照部署到您的存储库中。
  3. 快照版本 x.y.z-SNAPSHOT 现已在您的存储库中可用。

Maven 从未显示任何错误,但这是不正确的行为。您真正的问题实际上是您之前对插件的使用,而您的构建现在具有预期的行为 ;)

你能做什么:

  • 我建议您使用最新的插件版本保留您的实际配置。请记住,Maven Release Plugin 用于发布您的应用程序的 releases,而不是快照。
  • 如果您想将 SNAPSHOT 版本发布到您的存储库,请在包含 SNAPSHOT 版本的修订版上使用 mvn deploy 而不是创建版本。

希望这对您有所帮助。不要犹豫,询问细节我会更新我的答案。