16

我有以下项目结构:

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

我究竟做错了什么?

4

12 回答 12

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>
于 2013-10-26T19:43:12.287 回答
5

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

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

<remoteTagging>false</remoteTagging>
<suppressCommitBeforeTag>false</suppressCommitBeforeTag>
于 2013-09-24T22:51:28.917 回答
4

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

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

我已经从Branch中检出代码并正在执行 release:prepare

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

于 2013-08-21T20:34:15.487 回答
2

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

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

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

于 2014-06-23T13:43:47.073 回答
2

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

HTH,一月

于 2014-04-09T07:15:25.223 回答
2

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

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

于 2014-04-22T22:03:56.143 回答
1

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

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

于 2013-08-14T13:29:31.853 回答
1

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

于 2014-04-18T20:39:32.223 回答
1

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

于 2013-07-17T09:48:52.683 回答
1

只是为了记录,对我有用的唯一解决方法是 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 进行了测试,但它不起作用

于 2014-05-27T12:59:53.933 回答
0

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

于 2014-07-02T17:46:40.693 回答
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
于 2019-02-11T10:55:55.620 回答