Плагин номер сборки Maven, как сохранить номер сборки в файл? - PullRequest
20 голосов
/ 05 августа 2011

У меня есть проект Java с использованием Spring Framework и Git, и я хотел отобразить номер сборки. Я обнаружил плагин Номер сборки Maven . С Git номер сборки - это Git-хеш. Мне это не нравится, и я подумал, что свидание гораздо выразительнее.

Я нашел эту отличную статью в блоге , объясняющую, как использовать плагин с номером сборки с другим профилем для SVN и 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» не обнаруживает никакого нового файла, и кажется, что он не находится в target / тоже (target / находится в моем .gitignore).

Может быть, мне нужно изменить конфигурацию, чтобы сохранить номер сборки в файле? Как я могу использовать значение номера сборки?


Благодаря подсказке Майкла-О я прочитал главу о , как фильтровать файлы ресурсов в Руководстве по началу работы с 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. Для справки приведена полная конфигурация подключаемого модуля maven сборки 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 ]

10 голосов
/ 15 мая 2012

Вы не должны устанавливать опцию revisionOnScmFailure на true, логическое значение не ожидается. Установите строку ревизии, которую вы хотите использовать, когда SCM недоступен, например, na или тому подобное. Это не имеет значения для вашего случая, поскольку вы переопределяете формат номера сборки, но это будет более правильным.

См. buildnumber-maven-plugin docs .

4 голосов
/ 05 августа 2011

Сохраните его в отфильтрованном файле свойств. См. Использование maven для вывода номера версии в текстовый файл

2 голосов
/ 15 октября 2012

Я не смог воспроизвести проблему, о которой сообщает OP. В моем случае и командная строка, и m2eclipse работают нормально, и файл правильно создается в папке target / classes . Ответ, предоставленный @KasunBG, неверен. BuildNumber.properties генерируется только в том случае, если вы используете следующее:

        <format>{0,number}</format>
        <items>
            <item>buildNumber</item>
        </items>

buildNumber.properties используется для хранения числа, которое может быть увеличено. По этой причине (я думаю) плагин не генерирует этот файл, если вы используете timestamp / scmVersion и т. Д.

0 голосов
/ 05 августа 2011

На странице документации сказано, что файлы свойств хранятся в ${basedir}/buildNumber.properties, который создается при запуске фазы buildnumber:create.

...