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

Я пытаюсь добавить svn.revision в версию проекта в качестве номера сборки и не могу этого сделать. Моя банка имеет правильное имя во время упаковки, но она установлена ​​​​в моем локальном репозитории, как если бы $ {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>

person Peter Kahn    schedule 04.08.2009    source источник


Ответы (2)


Проблема состоит из двух частей:

  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>
person Rich Seller    schedule 08.08.2009

Добавьте это после 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 будет распознан при упаковке и развертывании.

person hoat4    schedule 15.01.2017
comment
Спасибо. К вашему сведению, после перехода на git мы начали передавать сборщик от jenkins, поскольку git делает менее понятный номер сборки. - person Peter Kahn; 15.01.2017