Могу ли я установить версию проекта с помощью buildnumber-maven-plugin? - PullRequest
12 голосов
/ 05 августа 2009

Я пытаюсь добавить svn.revision к версии проекта в качестве номера сборки и, похоже, не могу этого сделать. Мой jar имеет правильное имя durin package, но он установлен в моем локальном репозитории, как если бы $ {buildNumber} был / был неопределен, когда была установлена ​​версия.

Я получаю foo-1.0.0-SNAPSHOT- $ {buildNumber} вместо foo-1.0.0-SNAPSHOT- 304

Есть идеи, что я делаю неправильно или добавление ревизии в версию проекта - плохая идея? Спасибо за помощь.

<project>
  ...
  <version>1.0.0-${release.identifier}-${buildNumber}</version>
  <properties>
    <release.identifier>SNAPSHOT</release.identifier>
  </properties>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>buildnumber-maven-plugin</artifactId>
        <executions>
          <execution>
            <id>useLastCommittedRevision</id>
            <goals>
              <goal>create</goal>
            </goals>
            <configuration>
              <useLastCommittedRevision>true</useLastCommittedRevision>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  ...
</project>

Ответы [ 2 ]

9 голосов
/ 08 августа 2009

Задача состоит из двух частей:

  1. Вы пытаетесь установить buildNumber в версию до ее разрешения, поэтому она всегда будет ${buildNumber}, а не разрешенным значением.

    Вместо того, чтобы пытаться динамически изменять версию, вы должны установить buildNumber в элемент finalName в сборке. Это создаст артефакты с намеченным именем в локальном хранилище.

  2. Плагин установки игнорирует finalName и развертывает его как 1.0.0-SNAPSHOT независимо от того, я не знаю, как решить эту проблему. buildNumber добавляется в манифест, если вы настраиваете плагин, как показано ниже.

    Итак, ваша конфигурация будет выглядеть примерно так:

    <version>1.0.0-${release.identifier}</version>
    ...
    <build>
      <finalName>${project.artifactId}-${project.version}-${buildNumber}</finalName>
      ...
    </build>
    

Я бы не использовал номера сборки в SNAPSHOT проектах.

Maven предоставляет ключевое слово SNAPSHOT для обозначения изменчивого проекта в активной разработке. Поэтому, если вы ссылаетесь на проект с SNAPSHOT версией зависимостей, Maven автоматически проверяет наличие обновлений и синхронизирует ваши зависимости.

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

Лично я, во всяком случае, по возможности избегаю номеров сборок. Если мне нужно обновить проект, я просто поднимаю номер версии или использую суффикс, например beta-2 или RC2. Если вам нужно отслеживать ревизию в SNAPSHOT, я бы порекомендовал добавить ее в манифест, чтобы вы могли проверить, откуда произошла сборка, но использовать стандартный суффикс SNAPSHOT, чтобы позволить Maven разрешать версии в обычном порядке. В приведенной ниже конфигурации показано, как добавить ревизию в манифест.

Что касается вашей конфигурации, мне кажется, что все в порядке, если ваш URL-адрес SCM настроен правильно. Если у вас нет конфигурации SCM в вашем POM, это может быть проблемой.

Можете ли вы запустить с -X и проверить наличие вывода из плагина, указывающего, почему он не устанавливает свойство?

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>buildnumber-maven-plugin</artifactId>
  <version>0.9.4</version>
  <executions>
    <execution>
      <id>useLastCommittedRevision</id>
      <phase>validate</phase>
      <goals>
        <goal>create</goal>
      </goals>
    </execution>
  </executions>
</plugin>
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-jar-plugin</artifactId>
  <version>2.1</version>
  <configuration>
    <archive>
      <manifest>
        <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
      </manifest>
      <manifestEntries>
        <Implementation-Build>${buildNumber}</Implementation-Build>
      </manifestEntries>
    </archive>
  </configuration>
</plugin>
4 голосов
/ 15 января 2017

Добавьте это после buildnumber-maven-plugin:

<plugin>
    <groupId>io.github.michaldo</groupId>
    <artifactId>nashorn-maven-plugin</artifactId>
    <version>0.0.1</version>
    <executions>
        <execution>
            <phase>validate</phase>
            <goals>
                <goal>eval</goal>
            </goals>
            <configuration>
                <script>
                    $project.artifact.version = "${buildNumber}";
                </script>
            </configuration>
        </execution>
    </executions>
</plugin>

И buildNumber будет распознан при упаковке и развертывании.

...