maven-buildnumber-plugin svn версия доступна только тогда, когда не используется формат
При использовании maven-buildnumber-plugin 1.0 beta 4 кажется, что я могу получить ревизию svn, если не использую <format>
тег в конфигурации. Однажды я использую <format>
а также <item>buildnumber</item>
тег, я получаю автоматически увеличивающееся число, но оно больше не соответствует svn-ревизии, и я не знаю, как его вернуть. Есть ли способ использовать номер ревизии SVN в <format>
? Документация не очень понятна.
4 ответа
Плагин buildnumber-maven-plugin довольно странный, поэтому, вероятно, это все еще бета-версия. Формат предназначен только для тех элементов, к которым вы хотите применить формат сообщений Java, и в большинстве случаев он полезен только с метками времени и литеральными строками. Если вам не нужна временная метка, не используйте опцию формата при получении номера редакции Subversion. Если вы используете формат, то, как вы указали, он даст вам номер сборки, который всегда увеличивается на единицу, а не номер версии SCM.
Если вам нужна временная метка или у вас есть другие элементы, полученные из плагина buildnumber, а также ревизия Subversion, делайте их как отдельные исполнения. Вот пример того, как получить номер ревизии Subverison и метку времени сборки, используя два отдельных выполнения плагина:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.0-beta-4</version>
<executions>
<execution>
<id>generate-buildnumber</id>
<phase>validate</phase>
<goals>
<goal>create</goal>
</goals>
<configuration>
<useLastCommittedRevision>true</useLastCommittedRevision>
<buildNumberPropertyName>buildRevision</buildNumberPropertyName>
</configuration>
</execution>
<execution>
<id>generate-timestamp</id>
<phase>validate</phase>
<goals>
<goal>create</goal>
</goals>
<configuration>
<format>{0,date,yyyy-MM-dd HH:mm:ss}</format>
<items>
<item>timestamp</item>
</items>
<buildNumberPropertyName>buildDateTime</buildNumberPropertyName>
</configuration>
</execution>
</executions>
</plugin>
Ключом к выполнению этой работы является использование элемента buildNumberPropertyName. Посетите страницу использования плагина для получения дополнительной информации о полезности формата сообщений Java.
Я столкнулся с той же проблемой, и в течение нескольких минут я думал, что решение, предложенное @Jean-Rémy Revy, работает... но по какой-то причине этого не произошло.
Оказывается, в buildnumber-maven-plugin-1.2 они добавили поддержку специального свойства scmVersion. На данный момент v1.2 недоступна в репозитории maven, хотя на сайте плагина указано, что это GA. Поэтому вам нужно проверить исходный код (http://svn.codehaus.org/mojo/tags/buildnumber-maven-plugin-1.2/) и собрать его ( $ mvn install). Это также установит плагин в вашем локальном хранилище.
После этого просто сделайте это:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.2</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>create</goal>
</goals>
</execution>
</executions>
<configuration>
<format>{0,date,yyyy-MM-dd HH:mm:ss}.{1}</format>
<items>
<item>timestamp</item>
<item>scmVersion</item>
</items>
</configuration>
</plugin>
Судя по всему этого нет. Если вы используете конфигурацию формата, вы обязаны использовать один из элементов по умолчанию.
Укажите сообщение, как указано в java.text.MessageFormat. Это запускает "элементы" конфигурации для чтения
А потом отсюда:
Укажите соответствующие элементы для сообщения формата, как указано в java.text.MessageFormat. Специальными значениями элемента являются "timestamp" и "buildNumber / d *".
Также, если вы посмотрите на код для mojo, вот пара вещей, которые поддерживают это:
if ( format != null )
{
if ( items == null )
{
throw new MojoExecutionException(
" if you set a format, you must provide at least one item, "
+ "please check documentation " );
}
А также:
else
{
// Check if the plugin has already run.
revision = project.getProperties().getProperty(
this.buildNumberPropertyName );
if ( this.getRevisionOnlyOnce && revision != null)
{
getLog().debug( "Revision available from previous execution" );
return;
}
Судя по звукам, вы просите новую функцию (кстати, неплохая идея). Я хотел бы представить это здесь.
Существует убедительная причина, почему это было сделано разработчиком плагина. Рекомендуемый способ получить временную метку сборки проекта:
<project>
<properties>
<maven.build.timestamp.format>yyyy-MM-dd HH:mm:ss</maven.build.timestamp.format>
<buildDateTime>${maven.build.timestamp}</buildDateTime>
</properties>
</project>
Таким образом, все, что вам нужно, это получить номер ревизии, который можно сделать достаточно хорошо с помощью одного вызова buildnumber-maven-plugin в соответствии с его документацией.
PS Наличие одного исполнения вместо двух (как было предложено) экономит около одной секунды при каждом запуске плагина;)