mvn发布:准备不提交对pom.xml的更改

我试图释放一个Jenkins插件( stashNotifier )与Maven和面对释放插件的问题。

mvn clean release:prepare 

运行完成没有错误,但无法提交我的本地git存储库中更改的pom.xml。 即使它确实标记了我试图释放版本1.0.2的分支的头部。 这是我的本地分支在准备发布前的样子

 * 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已经包含了下一个开发版本,而这个开发版本反过来导致了后续的版本:执行以释放该快照版本。

从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或-DpushChanges = false)。 以下是我有效的POM的相关部分(我认为):

 [...] <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> 

我究竟做错了什么? 提前感谢您的见解!

我通过更新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提交(用准备和回滚目标testing)。

编辑:根据您的环境,可能需要不同版本的maven-release-plugin和maven-scm-provider-gitexe。 请参阅评论以获得更多讨论。

我遇到了同样的问题,解决scheme#richnou为我工作(升级SCM依赖)。 有这个问题创build的问题,请参阅下面的链接。 这个问题与新版本的Git有关,其中“git status”返回插件无法parsing的本地化消息。 这是根本原因。 这个问题在git scm(1.8.1版本)中通过使用git(它应该可以轻松地返回可parsing的输出)的--porcelain选项来解决,但是在这个修复之后,又出现了另一个问题 – 如果repository root(scm tag)不是工作目录, release:prepare仍然失败。 这个问题似乎在快照版本的Git SCM(尚未发布)中得到修复。 这可以通过将scm标签复制到孩子pom来解决。

MRELEASE-812

SCM-709

行家释放小插件和-混帐修复

你可能读过这个,因为上面提到的解决scheme没有为你工作。 我有同样的问题,我试过这里提到的一切。 我的版本是: maven-release-plugin 2.5git 1.7.9

为我工作的解决scheme是 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> 

这对我来说很好,发布版本正确地上传到发布回购和快照按预期工作。

当我使用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 -FC:\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. 

正如你所看到的,没有错误,只是没有检查状态后提交。 但是,当我从Windows命令提示符运行:

 ... [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 -FC:\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 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。

我刚刚遇到了同样的问题,从其他的答案和评论,认为这可能是一个在发布插件本身的错误。

在我的情况下,我使用插件的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为我解决了 。 希望它也能为你解决问题!