83

我正在尝试使用 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 已经包含下一个开发版本,这反过来又会导致后续 release:perform 发布该快照版本。

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

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

4

9 回答 9

96

我通过更新 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。有关更多讨论,请参阅评论。

于 2013-12-18T12:03:47.683 回答
18

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

MRELEASE-812

单片机-709

maven-release-plugin-and-git-fix

于 2014-01-03T11:40:12.717 回答
11

首先,richnou 和 vasekt 的答案解决了我的问题,我想我会发布这个答案只是因为版本比之前提到的要新,我认为最好再举一个包括它们的例子。

我正在使用 Git 3.3.x 运行 maven 发布插件 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>

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

于 2017-03-20T22:48:10.567 回答
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>
于 2014-03-24T21:03:12.720 回答
4

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

于 2015-09-30T08:03:20.190 回答
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

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

查看 maven-release-plugin:2.4.1的发行说明,似乎 MRELEASE-830 有办法解决它。

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

于 2013-04-01T05:06:35.867 回答
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。

于 2014-01-30T21:13:35.563 回答
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

于 2013-10-25T20:18:58.350 回答
0

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

  • 第一次成功了。
  • 第二次它不会提交。

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

于 2018-09-10T11:39:25.183 回答