当前位置: 首页 > 知识库问答 >
问题:

如何防止在maven发布插件中推送SNAPSHOT版本?

莫英卓
2023-03-14

我有一个maven项目,有很多模块(和模块内的模块)。我正在使用maven释放插件来控制pom.xml文件中的版本。

当运行命令mvn释放:准备plugin时,会相应地推送两个带有消息的提交:“[maven-释放-插件]准备发布v0.9.0.38”和“[maven-释放-插件]准备下一次开发迭代”。这里的第二个只是快照版本。

以下是maven release插件设置:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-release-plugin</artifactId>
            <version>2.5.3</version>

            <configuration>
                <tagNameFormat>v@{project.version}</tagNameFormat>
                <autoVersionSubmodules>true</autoVersionSubmodules>
                <checkModificationExcludes>
                    <checkModificationExclude>pom.xml</checkModificationExclude>
                    <checkModificationExclude>*/pom.xml</checkModificationExclude>
                </checkModificationExcludes>
                <branchBase>master</branchBase>
            </configuration>
        </plugin>
    </plugins>
</build>

推送时,我也将标签设置为远程git项目(您可以在中看到它)

编辑:

当我在每次提交时通过运行mvn release:prepare来增加项目的次要版本时
例如,提交如下所示:

[maven-Relase-plugin]准备下一个开发迭代
[maven-Relase-plugin]准备发布v0.9.0.38
(重构)代码清理
[maven-Relase-plugin]准备下一个开发迭代
[maven-Relase-plugin]准备发布v0.9.0.37
(功能)添加I18N支持

这看起来很难看,而且在每次更改时强制执行三次提交是非常糟糕的解决方案,只需不手动地增加pom文件的次要版本即可。

  • 每次提交增量项目版本(包括所有模块)之前

我如何才能实现这一点?


共有2个答案

帅煌
2023-03-14

要仅更新版本,您可以使用发布:update-version,然后手动提交。

文档中还列出了发布:准备的suppressCommitBeforeTag选项,听起来应该可以防止提交。

丁承德
2023-03-14

描述的行为是有意的——插件在发布模块后增加它们的版本,这是正常的。所以主要建议是在自定义之前三思而后行。

如果您使用的是Git,可以将pushChanges设置为false以避免推送。之后,您可以回滚上次提交并推送更改

git reset HEAD~ --hard
git push origin master

如果你解释一下为什么你认为第二次提交是多余的,建议会更实用。

此外,如果您不确定是否有更改,则始终可以使用dryRun开关。

更新时间:

  1. 进行更改
  2. mvn版本:设置-DnewVersion=

这些步骤可以很容易地聚合到脚本文件中,以避免弄虚作假。

作为替代方案,您可以查看BuildNumber maven插件,它也很有用。

 类似资料:
  • 问题内容: 我正在 Jenkins 内部使用M2发行插件,该 插件 内部调用了 maven-release-plugin 2.3.2 ,而在构建时抛出此错误: 。问题是,我的项目poms 的版本 确实 是1.0.0-SNAPSHOT。我想念什么? 是,而我只是为了 是的,我已经完成了基本的Google + SO拖网,并且到处都指出我的POM应该使用SNAPSHOT作为版本,而该版本已经存在。除了我

  • 所有POM都有作为它们的版本,也在dependencies标签下。它通过上传到Nexus repo。 我们最近开始做。因此,所有20个父POM现在都是和版本,因为它们都位于nexus中。所有标记现在都指向 开发人员不想指向发布版本。他们需要来自同行的edge开发版本,不管它是否不稳定。 SCM只希望指向版本,因为他必须每周执行一次,但由于指向快照版本而失败。 现在我知道了版本插件,但问题是,我应该

  • 我们在maven发行版和maven版本插件上有一个问题。在詹金斯,我们想做释放自动按下一个按钮。为了消除快照依赖关系,我们希望使用maven versions插件。假设我们有两个项目A(最新版本0.0.1,最新快照0.0.2-快照)和项目B,它们依赖于Projecta-0.0.2-快照,我们希望发布项目B,我们如何将项目Bs依赖项升级到最新可用的发布版本?maven versions插件目标“us

  • 我以一个新的gradle用户的身份创建gradle版本,但我过去曾与maven合作过。 我试图重现maven发布插件的动作: 将分支版本更改为发行号(在svn提交) 如您所见,我正在使用: Nexus OSS作为版本控制库 SVN作为scm Gradle(2.8) 我正试图通过这两个插件实现我的目标: > 将分支版本更改为发行号(在svn提交) 创建标签(位于svn) 将分支版本更改为新快照编号(

  • 我正在为iOS开发一个框架,我想使用哨兵进行崩溃报告。我想只发送与我的框架相关的崩溃事件,而不是主机应用程序中发生的所有崩溃。有没有办法防止事件从被交付或发送到哨兵iOSsdk哨兵(假设我有过滤一些事件的解决方案)?

  • 我正在使用Maven发布插件,我正在尝试发布。当我在master上(我使用Git)时,我的项目(多模块)和依赖项(也是多模块)都有SNAPSHOT版本。 假设我想从没有使用快照的master创建一个标记(跳过创建分支)。 这是我的简化pom。xml: 如果我这样做: mvn版本:prepare-Darguments=“-dependency1.version=1.2.3.0-Ddependency