Mvn release: 准备不提交对 pom.xml 的更改

我试图发布一个詹金斯插件(StashNotifier)与 Maven 和面临的问题与发布插件。

mvn clean release:prepare

在没有错误的情况下运行到完成,但是未能在我的本地 git 存储库中提交已更改的 pom.xml。尽管它确实标记了我试图发布1.0.2版本的分支的 HEAD。这是我的本地分支在准备发布之前的样子

* df60768 (HEAD, origin/develop, develop) upgraded parent pom to version 1.498
* 792766a added distribution management section to pom.xml and amended readme.md

这就是之后的样子

* df60768 (HEAD, tag: stashNotifier-1.0.2, origin/develop, develop) upgraded parent pom to version 1.498
* 792766a added distribution management section to pom.xml and amended readme.md

不幸的是,pom.xml 已经包含了下一个开发版本,这反过来又导致了后续的版本: operation 来发布快照版本。

从 maven 的命令输出来看,它似乎省略了 git commit 命令:

[INFO] Checking in modified POMs...
[INFO] Executing: /bin/sh -c cd /Users/gruetter/Dropbox/stashNotifier && git add -- pom.xml
[INFO] Working directory: /Users/gruetter/Dropbox/stashNotifier
[INFO] Executing: /bin/sh -c cd /Users/gruetter/Dropbox/stashNotifier && git status
[INFO] Working directory: /Users/gruetter/Dropbox/stashNotifier
[INFO] Tagging release with the label stashNotifier-1.0.2...
[INFO] Executing: /bin/sh -c cd /Users/gruetter/Dropbox/stashNotifier && git tag -F /var/folders/dr/xxbtyycs1z9dl2_snlj87zrh0000gn/T/maven-scm-678409272.commit stashNotifier-1.0.2
[INFO] Working directory: /Users/gruetter/Dropbox/stashNotifier
[INFO] Executing: /bin/sh -c cd /Users/gruetter/Dropbox/stashNotifier && git push git@github.com:jenkinsci/stashnotifier-plugin.git stashNotifier-1.0.2
[INFO] Working directory: /Users/gruetter/Dropbox/stashNotifier
[INFO] Executing: /bin/sh -c cd /Users/gruetter/Dropbox/stashNotifier && git ls-files
[INFO] Working directory: /Users/gruetter/Dropbox/stashNotifier
[INFO] Transforming 'Stash Notifier'...
[INFO] Not removing release POMs
[INFO] Checking in modified POMs...
[INFO] Executing: /bin/sh -c cd /Users/gruetter/Dropbox/stashNotifier && git add -- pom.xml
[INFO] Working directory: /Users/gruetter/Dropbox/stashNotifier
[INFO] Executing: /bin/sh -c cd /Users/gruetter/Dropbox/stashNotifier && git status
[INFO] Working directory: /Users/gruetter/Dropbox/stashNotifier
[INFO] Release preparation complete.

我正在运行 maven 3.0.5(没有—— dry-run or-DpushChanges = false):

[...]


<scm>
<connection>scm:git:git://github.com/jenkinsci/stashnotifier-plugin.git</connection>
<developerConnection>scm:git:git@github.com:jenkinsci/stashnotifier-plugin.git</developerConnection>
<url>https://github.com/jenkinsci/stashnotifier-plugin</url>
</scm>


[...]


<distributionManagement>
<repository>
<id>maven.jenkins-ci.org</id>
<url>http://maven.jenkins-ci.org:8081/content/repositories/releases/</url>
</repository>
<snapshotRepository>
<id>maven.jenkins-ci.org</id>
<url>http://maven.jenkins-ci.org:8081/content/repositories/snapshots</url>
</snapshotRepository>
<site>
<id>github-pages</id>
<url>gitsite:git@github.com/jenkinsci/maven-site.git:plugin-parent/stashNotifier</url>
</site>
</distributionManagement>


[...]


<properties>
[...]
<maven-release-plugin.version>2.2.2</maven-release-plugin.version>
[...]
</properties>


[...]


<build>
[...]
<pluginManagement>
<plugins>
[...]
<plugin>
<artifactId>maven-release-plugin</artifactId>
<version>2.2.2</version>
</plugin>
[...]
</pluginManagement>


[...]


<plugins>
[...]
<plugin>
<artifactId>maven-release-plugin</artifactId>
<version>2.2.2</version>
<configuration>
<goals>deploy</goals>
</configuration>
</plugin>
[...]
</plugins>
</build>

我做错了什么? 预先感谢您的见解!

41570 次浏览

我也遇到了同样的问题,从其他人的回答和评论中,我认为这很可能是发布插件本身的一个 bug。

在我的例子中,我使用了2.4版本的插件和 git 在一个新的和大部分是空的项目中,结构如下:

my-repo.git/
module-parent/     # running the release from here
(module-child-1/)  # except I hadn't created it yet
(module-child-2/)  # except I hadn't created it yet

(在解决问题之前,可以在这里看到这个项目的源代码: 我的项目也有同样的问题。)

看看 Maven-release-plugin 的发布说明: 2.4.1,似乎 MRELEASE-830有机会解决它。

我不确定那是否真的是 曾经是的问题,但是 将我的项目升级到2.4.1版本的插件为我解决了这个问题。希望它也能为你解决这个问题!

我在使用 cygwin + maven + git 时遇到了同样的问题。它没有显示错误,但没有尝试提交 pom 更改,只是在 git status之后停止:

[INFO] Checking in modified POMs...
[INFO] Executing: cmd.exe /X /C "git add -- pom.xml"
[INFO] Working directory: C:\Users\ltheisen\git\caasd-portal-automation
[INFO] Executing: cmd.exe /X /C "git status"
[INFO] Working directory: C:\Users\ltheisen\git\caasd-portal-automation
[INFO] Tagging release with the label portal-automation-0.3.9...
[INFO] Executing: cmd.exe /X /C "git tag -F C:\cygwin64\tmp\maven-scm-1212196933.commit portal-automation-0.3.9"
[INFO] Working directory: C:\Users\ltheisen\git\caasd-portal-automation
[INFO] Executing: cmd.exe /X /C "git push git@barrel.mitre.org:org-mitre-caasd/portal-automation.git portal-automation-0.3.9"
[INFO] Working directory: C:\Users\ltheisen\git\caasd-portal-automation
[INFO] Executing: cmd.exe /X /C "git ls-files"
[INFO] Working directory: C:\Users\ltheisen\git\caasd-portal-automation
[INFO] Transforming 'portal-automation'...
[INFO] Not removing release POMs
[INFO] Checking in modified POMs...
[INFO] Executing: cmd.exe /X /C "git add -- pom.xml"
[INFO] Working directory: C:\Users\ltheisen\git\caasd-portal-automation
[INFO] Executing: cmd.exe /X /C "git status"
[INFO] Working directory: C:\Users\ltheisen\git\caasd-portal-automation
[INFO] Release preparation complete.

正如您所看到的,没有错误,只是在检查状态后没有提交。然而,当我逃离命令提示符时:

...
[INFO] Executing: cmd.exe /X /C "git add -- pom.xml"
[INFO] Working directory: C:\Users\ltheisen\git\caasd-portal-automation
[INFO] Executing: cmd.exe /X /C "git status"
[INFO] Working directory: C:\Users\ltheisen\git\caasd-portal-automation
[INFO] Executing: cmd.exe /X /C "git commit --verbose -F C:\Users\ltheisen\AppData\Local\Temp\maven-scm-2030091036.commit pom.xml"
[INFO] Working directory: C:\Users\ltheisen\git\caasd-portal-automation
[INFO] Executing: cmd.exe /X /C "git symbolic-ref HEAD"
[INFO] Working directory: C:\Users\ltheisen\git\caasd-portal-automation
[INFO] Executing: cmd.exe /X /C "git push git@barrel.mitre.org:org-mitre-caasd/portal-automation.git master:master"
[INFO] Working directory: C:\Users\ltheisen\git\caasd-portal-automation
[INFO] Release preparation complete.

您可以看到它在检查状态之后确实提交了。不知道这是否也是你的问题,但对我很有效。

注意,这意味着您需要安装 msysgit

我通过更新 git scm 提供程序的依赖关系(而不是发布插件版本)解决了这个问题(运行 maven 3.0.5) :

<build>
<plugins>
<plugin>
<artifactId>maven-release-plugin</artifactId>
<version>2.4.2</version>
<dependencies>
<dependency>
<groupId>org.apache.maven.scm</groupId>
<artifactId>maven-scm-provider-gitexe</artifactId>
<version>1.8.1</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>

Git scm 1.8.1版本正确地进行了 git 提交(使用准备和回滚目标进行了测试)。

编辑: 根据您的环境,可能需要不同版本的 maven-release-plugin 和 maven-scm-Provider-gitexe。有关更多讨论,请参见评论。

我也遇到了同样的问题,# richnou 的解决方案对我很有用(升级 SCM 依赖性)。 在这个问题上产生了一个问题,见下面的链接。这个问题与 Git 的新版本有关,其中“ Git status”返回插件无法解析的本地化消息。这是根本原因。这个问题在 git scm (1.8.1版本)中通过使用 git 的 --porcelain选项(它应该返回容易解析的输出)得到了修复,但是在这个修复之后,又出现了另一个问题——如果存储库 root (scm tag)不是工作目录,那么 release:prepare仍然会失败。这个问题似乎在 Git SCM 的快照版本(尚未发布)中得到了修复。这可以通过将 scm标记复制到子 pom 来解决。

释放 -812

SCM-709

Maven-release-plugin-and-git-fix

我在本地使用 Git 1.8.x,遇到了类似的问题:

Maven-scm-plugin 可以

$ git add
$ git status

但是没有

$ git commit

使用 Git 1.7.x 的另一台机器帮助我解决了这个问题。

注意: 我尝试使用 maven-scm-plugin 1.8.1或1.9,maven-release-plugin 2.4.1或2.4.2。

您可能正在阅读这篇文章,因为上面的解决方案对您来说不起作用。 我也有同样的问题,我尝试了这里提到的所有方法。 我的版本是: maven-release-plugin 2.5git 1.7.9

对我来说,成功了的解决方案是 降级 maven-release-plugin 版本2.3.2

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<autoVersionSubmodules>true</autoVersionSubmodules>
</configuration>
</plugin>
</plugins>
</build>

maven-release-plugin升级到2.5.2有所帮助(升级到2.5没有帮助; 它适用于某些人,但不适用于所有人,这可能取决于系统上其他较新的软件)。我相信它会自动吸引新的供应商。

首先,Richnou 和 Vasekt 的答案解决了我的问题,我想我发表这个答案只是因为新的版本比已经提到的,我认为这将是一个很好的额外的例子,包括他们。

我使用 Git 3.3.x 运行 maven release plugin 2.3.2,但没有指定 maven scm 依赖版本,这导致了快照问题。对我来说,我刚刚升级到最新版本的时候,为两个 maven 发布插件和 scm 依赖性,如下:

<plugin>
<artifactId>maven-release-plugin</artifactId>
<version>2.5.3</version>
<dependencies>
<dependency>
<groupId>org.apache.maven.scm</groupId>
<artifactId>maven-scm-provider-gitexe</artifactId>
<version>1.9.5</version>
</dependency>
</dependencies>
</plugin>

这对我来说工作得很好,发行版本正确上传到发行版回购和快照工作以及预期。

类似的问题,但我有这个问题,使用 Jenkins 发布插件和 Gitlab:

  • 第一次成功了。
  • 这是第二次了。

原来在 pom.xml 中的 SCM 配置中有一个输入错误,所以第一次创建了带有输入错误的项目。第二次,Maven 访问过时的项目并抱怨,没有提交更改。