Maven Release Plugin - prepare创建Snapshot版本的标签而不是发行版本

时间:2013-05-20 13:31:32

标签: maven maven-release-plugin

我有以下项目结构:

  • 框架
    • 框架母体,聚甲醛
    • 框架出头
    • ...

在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时,我发现它们仍然具有初始快照版本作为版本。这当然会导致执行步骤构建快照版本而不是发布版本。

我做错了什么?

12 个答案:

答案 0 :(得分:9)

我在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 :(得分:4)

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

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

我已经从分支中删除了代码,并且正在执行发布:准备

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

答案 2 :(得分:4)

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

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

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

答案 3 :(得分:2)

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

HTH, 扬

答案 4 :(得分:2)

对于复杂的项目结构,此问题仍未解决。

在此处查看补丁预览: http://jira.codehaus.org/browse/SCM-740

答案 5 :(得分:2)

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

如果你的顶级pom.xml不在git root中,那么release:prepare在标记之前不会提交pom。

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

答案 6 :(得分:1)

切割我的第一个版本时,我遇到了完全相同的问题(非常混乱)。 第二次这个问题消失了 - 所以只做第二次(清洁/新鲜)发布。

答案 7 :(得分:1)

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

但这是一个奇怪的问题,我不清楚它来自何处。

答案 8 :(得分:1)

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

答案 9 :(得分:1)

仅仅是为了记录,唯一对我有用的解决方法是安德烈亚斯丹格尔的解决方法是添加一个git配置来设置解析本地化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进行测试并且无法正常工作

答案 10 :(得分:0)

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

答案 11 :(得分:0)

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

# 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