Maven 发布插件 - 准备创建快照版本而不是发布版本的标签

Posted

技术标签:

【中文标题】Maven 发布插件 - 准备创建快照版本而不是发布版本的标签【英文标题】:Maven Release Plugin - prepare creates tag of Snapshot version instead of release version 【发布时间】:2013-05-20 13:31:31 【问题描述】:

我有以下项目结构:

框架 框架-父-pom 框架之类的东西 ...

在 framework-parent-pom 的 pom.xml 中,我定义了以下插件:

<plugin>
    <artifactId>maven-release-plugin</artifactId>
    <version>2.3.2</version>
    <configuration>
        <branchBase>http://.../svn/REPO/branches/framework</branchBase>
        <tagBase>http://.../svn/REPO/tags/releases/framework</tagBase>
        <tagNameFormat>release-@project.version</tagNameFormat>
        <releaseProfiles>release</releaseProfiles>
    </configuration>
</plugin>

并遵循 SCM:

<scm>
    <developerConnection>scm:svn:http://.../svn/REPO/trunk/framework/framework-parent-pom</developerConnection>
</scm>

当我运行以下命令时...

mvn release:prepare -DautoVersionSubmodules=true -Darguments="-DskipTests" -Dresume=false

...一切似乎都很顺利。

在本地创建了带有发布版本的 JAR,并且 POM 很好地更新到下一个 SNAPSHOT 版本。同样在 SVN 中,乍一看似乎还可以。该标签已创建,其中包含所有框架项目。

但是,在查看标记的 POM 时,我发现它们仍然具有 初始快照版本 作为版本。这当然会导致执行步骤构建快照版本而不是发布版本。

我做错了什么?

【问题讨论】:

底线,发布按预期工作,但标签中的版本没有删除-SNAPSHOT 后缀。对吗? 确实,这是根本问题 实际准备标签。但是你也继续跑mvn release:perform了吗? 是的,并且那个人检查了带有快照版本的标签,并且(令人惊讶的是没有错误)将它安装在我的本地存储库(但快照版本)上。在 framework-parent-pom/checkout (Maven 签出标签的地方)我也只看到 SNAPSHOT 版本)。 “准备实际标签”是什么意思? 我发布这可能不是很有帮助,但我有很多问题是发布插件没有做它应该做的事情(见this question)所以也许考虑为自己节省一些时间和自己实施。 maven scm 插件为您提供了很多您需要的功能。 【参考方案1】:

我在 maven-release-plugin 问题跟踪器MRELEASE-812 中找到了解决方法:

就我而言,变化是:

       <plugin>
         <artifactId>maven-release-plugin</artifactId>
-        <version>2.2.2</version>
+        <version>2.4.1</version>
         <configuration>
           <releaseProfiles>release</releaseProfiles>
           <goals>install animal-sniffer:check deploy site</goals>
         </configuration>
+        <dependencies>
+          <dependency>
+            <groupId>org.apache.maven.scm</groupId>
+            <artifactId>maven-scm-api</artifactId>
+            <version>1.8.1</version>
+          </dependency>
+          <dependency>
+            <groupId>org.apache.maven.scm</groupId>
+            <artifactId>maven-scm-provider-gitexe</artifactId>
+            <version>1.8.1</version>
+          </dependency>
+        </dependencies>
       </plugin>

【讨论】:

+1 您链接到的线程确实对我来说也是解决方案。当场。 我在使用 maven-release-plugin 2.5 时遇到了这个问题。然后我尝试了你的建议。然后,根据@Tristan,我查看了 SCM-740。这表示它已在 SCM 1.9.1 中修复。发布插件 2.5.0 是 SCM 1.9。所以,在maven发布插件中还有待解决。我认为一旦这个问题得到解决,它就会得到解决:jira.codehaus.org/browse/MRELEASE-888。我能够通过使用你的 pom sn-p 并用 1.9.1 替换 1.8.1 版本来让它工作 正如预期的那样,它也适用于发布插件 2.5、scm 插件 1.9.1(或 1.9.2)。密钥是 SCM 1.9.1 或更高版本。 不适用于新的 Maven 版本(3.6.3 及更高版本)【参考方案2】:

我遇到了类似的问题。它正在标记快照版本,因为它在标记之前没有提交 POM 更改。

我发现它只有在我使用以下配置选项时才有效:

<remoteTagging>false</remoteTagging>
<suppressCommitBeforeTag>false</suppressCommitBeforeTag>

【讨论】:

【参考方案3】:

我也面临同样的问题。在我来的时候是因为错误的 SCM developerConnection 字符串。

<scm>
<developerConnection>scm:svn:http://.../../trunk</developerConnection>
</scm>

我已从 Branch 签出代码并正在执行 release:prepare

您可以检查您的 developerConnection 路径,它应该与您的代码存储库路径相同。

【讨论】:

【参考方案4】:

如果您遇到此问题,您很可能遇到https://jira.codehaus.org/browse/MRELEASE-812,并且需要更改您使用的发布插件(或 git)的版本。

HTH, 一月

【讨论】:

【参考方案5】:

对于复杂的项目结构,这个问题仍然没有解决。

补丁预览见这里: http://jira.codehaus.org/browse/SCM-740

【讨论】:

【参考方案6】:

如果您在 2.5 版的 maven 发布插件中看到此错误,那么您可能遇到了这个错误:http://jira.codehaus.org/browse/MRELEASE-875

如果您的*** pom.xml 不在 git 根目录中,则 release:prepare 在标记之前不会提交 pom。

唯一的解决方法似乎是在 git 中重新排列您的项目结构。

【讨论】:

【参考方案7】:

我在剪辑第一个版本时遇到了完全相同的问题(这真的很混乱)。 这个问题第二次消失了 - 所以只需进行第二次(干净/新鲜)发布。

【讨论】:

hm - 有线 - 不确定 &lt;tagNameFormat&gt; 是否会以某种方式干扰 - 你试过不带吗?【参考方案8】:

我遇到了同样的问题。我通过手动编辑标签的 POM 将其设置为已发布版本来规避该问题。然后 release:perform 至少可以工作。

但这是一个奇怪的问题,我不知道它的来源。

【讨论】:

【参考方案9】:

作为一种解决方法,您还可以将git config --global status.displayCommentPrefix true 以旧格式输出,以便maven 可以解析git status 命令。

【讨论】:

【参考方案10】:

仅作记录,对我有用的唯一解决方法是 Andreas Dangel 的解决方法,即添加一个 git config 来设置解析本地化 git 输出的旧行为,命令就是这个

git config --add status.displayCommentPrefix true

这里是解决方法的解释:http://jira.codehaus.org/browse/SCM-740?focusedCommentId=341325&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-341325

最后一个提示,此解决方法仅适用于 2.4.2 版本,我使用 2.5 进行了测试,但它不起作用

【讨论】:

【参考方案11】:

结合使用 Maven 3.2.2 和 Maven Release Plugin 2.5 解决了这个问题。

【讨论】:

【参考方案12】:

这就是我管理发布插件为我工作的方式。我写了以下脚本。希望它会对某人有所帮助。

# Reads release.properties and extracts properties by key
function prop 
    grep -E "$1=" ./release.properties|cut -d'=' -f2


echo "Performing a release [Dry run]..."    
mvn release:clean release:prepare -DautoVersionSubmodules=true --offline -DdryRun=true

TAG_NAME=$(prop 'scm.tag')

echo "Tagging a release $TAG_NAME..."   
find .. -maxdepth 2 -mindepth 2 -name "*pom.xml.tag" -exec rename -f 's/\.tag$//'  ";"
find .. -maxdepth 2 -mindepth 2 -name "*pom.xml" -exec git add  ";"
git commit -m "Release $TAG_NAME"
git tag -a -m "Release $TAG_NAME" $TAG_NAME

DEV_VERSION=$(prop 'project.dev.cp\\:cp-builder')
echo "Creating next development version $TAG_NAME..."
find .. -maxdepth 2 -mindepth 2 -name "*pom.xml.next" -exec rename -f 's/\.next$//'  ";"
find .. -maxdepth 2 -mindepth 2 -name "*pom.xml" -exec git add  ";"
git commit -m "Development version $DEV_VERSION"

echo "Pushing changes to GitLab..."
git push --follow-tags
echo "Deploying a release $TAG_NAME..."
mvn release:perform
echo "Cleaning release..."
mvn release:clean

【讨论】:

以上是关于Maven 发布插件 - 准备创建快照版本而不是发布版本的标签的主要内容,如果未能解决你的问题,请参考以下文章

maven 发布:准备版本字符错误

在 Maven 中,如何在版本中命名战争文件与在快照构建中不同

mvn release 插件发布下一个快照不是当前版本

如何创建通过电子邮件发送视图快照的存储过程?

创建发布版本后如何管理 Maven 依赖工件

artifactory gradle 插件覆盖快照版本