Могу ли я установить версию проекта с помощью buildnumber-maven-plugin?
-
22-07-2019 - |
Вопрос
Я пытаюсь добавить 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
будет распознан при упаковке и развертывании. Р>