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 - 有线 - 不确定<tagNameFormat>
是否会以某种方式干扰 - 你试过不带吗?【参考方案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 发布插件 - 准备创建快照版本而不是发布版本的标签的主要内容,如果未能解决你的问题,请参考以下文章