Передача дополнительного файла во время релиза Maven: что, если нам сначала нужно добавить его в систему контроля версий?
Есть ли известный способ зафиксировать изменения в дополнительном файле во время выпуска Maven, а также добавить этот файл в систему контроля версий, если это необходимо?
У нас есть файл ресурсов, который потенциально может быть изменен в процессе сборки, и мы хотим зафиксировать любые изменения в этом файле во время выпуска Maven, чтобы наиболее точная версия была отражена в наших тегах.
Мы можем получить большую часть пути, настроив maven-scm-plugin для проверки изменений в нашем файле, и добавив scm:checkin
к preparationGoals
из maven-release-plugin, вот так:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-scm-plugin</artifactId>
<version>1.9.5</version>
<configuration>
<includes>resource.file</includes>
<message>[maven-scm-plugin] Committing resource.file from latest release</message>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.5.3</version>
<configuration>
<preparationGoals>clean verify scm:checkin</preparationGoals>
</configuration>
</plugin>
Этот подход прекрасно обрабатывает новые изменения в существующем файле ресурсов. К сожалению, происходит сбой, когда наша сборка создает новый файл ресурсов, который еще не добавлен в систему управления версиями:
[INFO] [ERROR] Provider message:
[INFO] [ERROR] The svn command failed.
[INFO] [ERROR] Command output:
[INFO] [ERROR] svn: E200009: Commit failed (details follow):
[INFO] svn: E200009: '/acme/builder/workspace/_experiment-commit-on-release/resource.file' is not under version control
Хотя мы можем обойти это дело, добавив scm:add
в preparationGoals
этот подход потерпит неудачу, когда наш файл ресурсов будет добавлен в систему управления версиями:
[INFO] [ERROR] Provider message:
[INFO] [ERROR] The svn command failed.
[INFO] [ERROR] Command output:
[INFO] [ERROR] svn: warning: W150002: '/acme/builder/workspace/_experiment-commit-on-release/resource.file' is already under version control
[INFO] svn: E200009: Could not add all targets because some targets are already versioned
[INFO] svn: E200009: Illegal target for the requested operation
Я уверен, что Maven может вызвать какой-то внешний сценарий для решения этой проблемы для нас, но я бы предпочел сохранить эту логику в самом Maven, если это вообще возможно.