Mvn release: подготовить не совершать изменений в pom.xml

Я пытаюсь выпустить плагин Jenkins (stashNotifier) с Maven и столкнуться с проблемой с плагином выпуска.

mvn clean release:prepare

запускается без ошибок, но не может зафиксировать измененный pom.xml в локальном репозитории git. Несмотря на то, что он помечает HEAD ветки, на которой я пытаюсь выпустить версию 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 [email protected]: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:[email protected]: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:[email protected]/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>

Что я делаю неправильно? Заранее благодарим за понимание!

Ответ 1

Я решил проблему на моей стороне (запустил maven 3.0.5), обновив зависимость провайдера git scm, а не версию плагина release:

<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 (проверяется с целями подготовки и откат).

EDIT: в зависимости от вашей среды могут потребоваться различные версии maven-release-plugin и maven-scm-provider-gitexe. См. Комментарии для более подробного обсуждения.

Ответ 2

Я столкнулся с той же проблемой, решение #richnou работает для меня (обновление зависимости SCM). Проблема возникает из-за этой проблемы, см. Ссылку ниже. Проблема связана с новой версией Git где "git status" возвращает локализованные сообщения, которые плагин не может проанализировать. Это основная причина. Проблема была исправлена ​​в Git scm (версия 1.8.1) с помощью опции --porcelain Git (которая должна возвращать легко обрабатываемый вывод), но после этого исправления возникла другая проблема - если корень репозитория (scm tag ) не является рабочим каталогом, release:prepare все еще не работает. Эта проблема, похоже, исправлена ​​в версии моментального снимка Git SCM (еще не выпущена). Это может быть затруднено копированием тега scm в дочерний pom.

MRELEASE-812

SCM-709

maven-release-plugin-and-git-fix

Ответ 3

Вероятно, вы читали это, потому что вышеупомянутые решения не сработали для вас. У меня была такая же проблема, и я попробовал все, что упоминалось здесь. Мои версии: maven-release-plugin 2.5 и git 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>

Ответ 4

Во-первых, ответы от richnou и vasekt решили мою проблему. Я решил опубликовать этот ответ только из-за более новых версий, чем было упомянуто, и я подумал, что было бы неплохо дать дополнительный пример, включая их.

Я запускал maven release plugin 2.3.2 с Git 3.3.x без указания версии зависимости 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>

Это сработало для меня, выпуская версии, загруженные должным образом в репозиторий релиза, и снимок работал так же, как ожидалось.

Ответ 5

Обновление maven-release-plugin до 2.5.2 помогло (обновление до 2.5 didnt, оно работает для некоторых людей, но не для всех, возможно, в зависимости от другого более нового программного обеспечения в системе). Я считаю, что он автоматически подключается к новому провайдеру.

Ответ 6

Я столкнулся с этой же проблемой при использовании 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 [email protected]: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 [email protected]:org-mitre-caasd/portal-automation.git master:master"
[INFO] Working directory: C:\Users\ltheisen\git\caasd-portal-automation
[INFO] Release preparation complete.

Вы можете видеть, что он зафиксировал его после проверки состояния. Не уверен, что это ваша проблема, но это сработало для меня.

Обратите внимание, что это означает, что вам нужно установить msysgit

Ответ 7

Я использую 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

Я просто столкнулся с этой же проблемой, и из других ответов и комментариев выяснилось, что это, скорее всего, ошибка в самом выпуске.

В моем случае я использовал версию 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 плагина разрешило его для меня. Надеюсь, он тоже решает проблему для вас!