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

时间:2013-03-01 20:58:35

标签: maven plugins jenkins release

我正在尝试使用Maven发布Jenkins插件(stashNotifier)并面临发布插件的问题。

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

从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>

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

9 个答案:

答案 0 :(得分:89)

我通过更新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 commit(使用prepare和rollback目标进行测试)。

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

答案 1 :(得分:16)

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

MRELEASE-812

SCM-709

maven-release-plugin-and-git-fix

答案 2 :(得分:9)

您可能正在阅读此内容,因为上述解决方案并不适合您。 我有同样的问题,我尝试了这里提到的一切。 我的版本是: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>

答案 3 :(得分:7)

首先,来自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>

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

答案 4 :(得分:4)

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

答案 5 :(得分:1)

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

在我的情况下,我在一个新的,大部分是空的项目中使用git插件的2.4版,结构如下:

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

(在解决问题之前,可以在此处看到此项目的源代码:my project with the same problem。)

release notes for maven-release-plugin:2.4.1,似乎MRELEASE-830可能有解决它的问题。

我不确定实际是否问题,但将我的项目升级到插件的2.4.1为我解决了。希望它也为你解决问题!

答案 6 :(得分: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.

正如您所看到的,没有错误,只是在检查状态后没有提交。但是,当我从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 -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

答案 7 :(得分:1)

我在本地使用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。

答案 8 :(得分:0)

类似的问题,但是我使用Jenkins Release Plugin和Gitlab遇到了这个问题:

  • 第一次使用。
  • 第二次它不会提交。

结果证明,我们在pom.xml中的SCM配置中有一个错字,因此带有错字的项目是第一次创建的。第二次,Maven正在访问过时的项目并抱怨,没有提交更改。