Плагин Maven номер сборки, как сохранить номер сборки в файл?
У меня есть проект Java с использованием Spring Framework и Git, и я хотел отобразить номер сборки. Я нашел плагин Build Number Maven. С Git номер сборки - это Git-хеш. Мне это не нравится, и я подумал, что свидание было гораздо более выразительным.
Я нашел эту отличную статью в блоге, объясняющую, как использовать плагин с номером сборки с другим профилем для SVN и Git. Поскольку я просто использую Git, а не создаю новый профиль, я просто скопировал часть плагина в свой тег сборки.
Когда я запускаю "пакет mvn", он говорит мне:
[INFO] --- buildnumber-maven-plugin:1.0:create (default) @ sherd ---
[INFO] Storing buildNumber: 2011-08-04_21-48_stivlo at timestamp: 1312487296631
Который выглядит хорошо, но мне интересно, где он хранится? "git status" не обнаруживает никакого нового файла, и кажется, что он не находится в target/ тоже (target/ находится в моем.gitignore).
Может быть, я должен изменить конфигурацию, чтобы сохранить номер сборки в файле? Как я могу использовать значение номера сборки?
Благодаря подсказке Michael-O я прочитал главу о том, как фильтровать файлы ресурсов в Руководстве по началу работы с Maven. Я создал файл application.properties в src/main/resources/properties/application.properties со следующим содержимым:
# application properties
application.name=${pom.name}
application.version=${pom.version}
application.build=${buildNumber}
Я добавил следующий фрагмент XML в мой раздел сборки:
<resources>
<resource>
<directory>src/main/resources/properties</directory>
<filtering>true</filtering>
</resource>
</resources>
Теперь, когда я вызываю из командной строки "mvn package", этот файл свойств сохраняется в target/classes/properties/application.properties, например, со следующим содержимым:
# application properties
application.name=Sherd Control Panel
application.version=1.0.1-SNAPSHOT
application.build=2011-08-05_05-55_stivlo
Все отлично работает из командной строки, но, вздох, m2eclipse выдает ошибки сборки:
05/08/11 6.05.03 CEST: Build errors for obliquid-cp;
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal
org.codehaus.mojo:buildnumber-maven-plugin:1.0:create (default) on project
sherd: Cannot get the branch information from the scm repository :
Exception while executing SCM command.
По какой-то причине m2eclipse пытается подключиться к моему репозиторию, но не может, потому что это Git-репозиторий, доступ к которому осуществляется через SSH и закрытый ключ. Интересно, могу ли я сказать m2eclipse не подключаться к Git.
После более глубокого изучения я нашел опцию revisionOnScmFailure, установил для нее значение true и теперь также работает m2eclipse. Для справки, здесь представлена полная конфигурация подключаемого модуля mavn для сборки buildnumber (она находится в pom.xml в разделе build / plugins).
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.0</version>
<executions>
<execution>
<phase>generate-resources</phase>
<goals>
<goal>create</goal>
</goals>
</execution>
</executions>
<configuration>
<doCheck>false</doCheck>
<doUpdate>false</doUpdate>
<revisionOnScmFailure>true</revisionOnScmFailure>
<format>{0,date,yyyy-MM-dd_HH-mm}_{1}</format>
<items>
<item>timestamp</item>
<item>${user.name}</item>
</items>
</configuration>
</plugin>
4 ответа
Сохраните его в отфильтрованном файле свойств. См. Использование maven для вывода номера версии в текстовый файл.
Вы не должны устанавливать revisionOnScmFailure
возможность true
, он не ожидает логического. Установите строку ревизии, которую вы хотите использовать, когда SCM недоступен, например, na
или как то Это не имеет значения для вашего случая, так как вы переопределяете формат номера сборки, но это будет более правильным.
Смотрите документы buildnumber-maven-plugin.
Я не смог воспроизвести проблему, о которой сообщает OP. В моем случае и командная строка, и m2eclipse работают нормально, и файл правильно создается в папке target/classes. Ответ, предоставленный @KasunBG, неверен. BuildNumber.properties генерируется, только если вы используете следующее:
<format>{0,number}</format>
<items>
<item>buildNumber</item>
</items>
buildNumber.properties используется для хранения числа, которое может быть увеличено. По этой причине (я думаю) плагин не генерирует этот файл, если вы используете timestamp/scmVersion и т. Д.
На странице документации написано, что файлы свойств хранятся в ${basedir}/buildNumber.properties
, который создается, когда buildnumber:create
фаза пройдена.