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

StackOverflow https://stackoverflow.com/questions/1230015

Вопрос

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

Вместо foo-1.0.0-SNAPSHOT- 304

я получаю foo-1.0.0-SNAPSHOT- $ {buildNumber} .

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

<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>
Это было полезно?

Решение

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

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

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

  • Плагин установки игнорирует 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>
    

    Другие советы

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top