Ответ 1
Сохраните его в отфильтрованном файле свойств.
У меня есть проект Java с использованием Spring Framework и Git, и мне нужно отобразить номер сборки. Я нашел Build Number Maven plugin. С Git номер сборки представляет собой хэш Git. Мне это не нравится, и я думал, что дата была гораздо более выразительной.
Когда я запускаю "mvn package", он говорит мне:
[INFO] --- buildnumber-maven-plugin:1.0:create (default) @ sherd ---
[INFO] Storing buildNumber: 2011-08-04_21-48_stivlo at timestamp: 1312487296631
Что выглядит нормально, но мне интересно, где он хранится? "git status" не обнаруживает никакого нового файла и кажется, что он не находится в целевом/слишком (цель/находится в моем .gitignore).
Возможно, мне нужно изменить конфигурацию, чтобы сохранить номер сборки в файле? Как я могу использовать значение номера сборки?
Благодаря намеку на Майкла-О, я прочитал главу о как фильтровать файлы ресурсов в Руководстве Maven Getting Started Guide. Я создал файл 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. Для справки, вот полная конфигурация плагина buildnumber maven, который я использовал (он находится в 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>
Сохраните его в отфильтрованном файле свойств.
Вы не должны устанавливать revisionOnScmFailure
вариант true
, он не ожидает логического. Установите его в строку ревизии, которую вы хотите использовать, когда SCM недоступен, например na
или тому подобное. Это не имеет значения для вашего случая, поскольку вы переопределяете формат номера сборки, но это было бы более правильным.
Я не смог воспроизвести проблему, о которой сообщает OP. В моем случае как командная строка, так и m2eclipse работают нормально, и файл создается корректно в папке target/classes. Ответ, предоставленный @KasunBG, неверен. Файл buildNumber.properties создается только в том случае, если вы используете следующее:
<format>{0,number}</format>
<items>
<item>buildNumber</item>
</items>
buildNumber.properties используется для хранения числа, которое может быть увеличено. По этой причине (я думаю) плагин не генерирует этот файл, если вы используете timestamp/scmVersion и т.д.
На странице documentation указано, что файлы свойств хранятся в ${basedir}/buildNumber.properties
, который создается при выполнении фазы buildnumber:create
.