maven-buildnumber-plugin svn версия доступна только тогда, когда не используется формат - PullRequest
9 голосов
/ 01 декабря 2010

При использовании maven-buildnumber-plugin 1.0 beta 4 кажется, что я могу получить ревизию svn, если не использую тег <format> в конфигурации.Как только я использую теги <format> и <item>buildnumber</item>, я получаю автоматически увеличивающееся число, но оно больше не соответствует ревизии svn, и я не знаю, как вернуть его.Есть ли способ использовать номер ревизии SVN в <format>?Документация не очень понятна.

Ответы [ 4 ]

10 голосов
/ 02 декабря 2010

Плагин 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 для.

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

Я столкнулся с той же проблемой, и в течение нескольких минут я думал, что решение, предложенное @ Jean-Rémy Revy, работает ... но по какой-то причине это не так.-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>
3 голосов
/ 01 декабря 2010

Судя по всему, нет.Если вы используете конфигурацию формата, вы обязаны использовать один из элементов по умолчанию.

С здесь :

Укажите сообщение, как указано в 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;
    }

Судя по звукам, вы просите новую функцию (кстати, неплохая идея).Я хотел бы представить его в таком виде здесь .

2 голосов
/ 24 ноября 2011

Существует убедительная причина, по которой это было сделано разработчиком плагина. Рекомендуемый способ получить метку времени сборки проекта:

<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 в соответствии с его документацией.

P.S. Один запуск вместо двух (как было предложено) экономит около одной секунды каждый раз, когда вызывается плагин;)

...