【问题标题】:Maven Release Plugin - prepare creates tag of Snapshot version instead of release versionMaven 发布插件 - 准备创建快照版本而不是发布版本的标签
【发布时间】: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 插件为您提供了很多您需要的功能。

标签: maven maven-release-plugin


【解决方案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
                    

                    【讨论】:

                      猜你喜欢
                      • 2012-07-13
                      • 2016-09-09
                      • 2012-08-13
                      • 1970-01-01
                      • 2013-01-16
                      • 2015-04-21
                      • 1970-01-01
                      • 2021-10-15
                      • 1970-01-01
                      相关资源
                      最近更新 更多