Как отключить плагин релиза maven проверить локальные изменения?
Я использую плагин релиза maven. В моем pom существует и Ant задача, которая автоматически исправляет некоторые файлы свойств с дополнительной информацией. Эти исправления не должны быть в SCM.
Но maven не успевает за ошибкой:
Cannot prepare the release because you have local modifications
Можно ли установить некоторые параметры, чтобы не проверять локальные модификации?
Спасибо.
Ответы
Ответ 1
Я не очень хорошо знаком с maven-release-плагином, но я вижу, что есть свойство checkModificationExcludes, которое вы можете использовать для своей цели. Конфигурация должна быть примерно такой:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.2.2</version>
<configuration>
...
<checkModificationExcludes>
<checkModificationExclude>file_1</checkModificationExclude>
<checkModificationExclude>dir_1/file_2</checkModificationExclude>
</checkModificationExcludes>
</configuration>
</plugin>
Ответ 2
Мы пытались запустить выпуск от jenkins, но он всегда терпел неудачу с тем же сообщением...
Cannot prepare the release because you have local modifications
... что было странно, потому что мы используем jenkins для проверки и создания последних источников до выпуска.
Наконец, мы выяснили, что проблема в том, что мы строили на Windows node, а некоторые пути к файлам были слишком длинными, из-за чего плагин maven-release-плагин жаловался на локальные модификации. Переключение на Linux node решило эту проблему.
Ответ 3
Удаление моей папки проекта target
из источника управления исправило эту проблему для меня.
Ответ 4
Я бы предложил исправить ваш процесс сборки, чтобы он не "исправлял" файлы, находящиеся под SCM. Существует несколько способов сделать это, проще всего скопировать файлы свойств в какой-то каталог под ${project.build.outputDirectory}
и запустить Ant script в этих файлах, а не оригиналы
Ответ 5
@AndrewLogvinov ответ на полпути. Вторая половина упоминается в этом:
Я обнаружил, что сравнение в org.apache.maven.shared.release.phase.ScmCheckModificationsPhase.execute() удаляет путь и сравнивает только имена файлов. Итак, я изменил свой pom, чтобы игнорировать application.properties вместо свойств ${thewholepath}/applications. И вот, успех.
По какой-то странной причине вы не можете включать пути в этот тег. Вы можете указывать только имена файлов.
Ответ 6
В моем случае это работало на Windows, переименовывая имя задания в более короткую длину (около 20 символов).
В моем случае имя работы Дженкинса, а также имя ветки SVN были длиннее (около 40 символов).
Если некоторые пути к файлам слишком длинные, это заставляет плагин maven-release-plugin пожаловаться на локальные изменения. Дженкин создает локальное рабочее пространство с именем работы
например Для и как ниже, работа Дженкинс при выпуске начнет жаловаться на локальные изменения.
D:\dev.env\data\jenkins\jobs\<LongerJobName>\workspace\<LongerBranchName>\testCommonJar\src\main\java\com.example.webservice.service.TestServiceImpl.java