Как мне добавить информацию о временной метке в артефакты Maven?
Вопрос
Я обновляю большую систему сборки, чтобы использовать Maven2 вместо Ant, и у нас есть два связанных требования, на которых я застрял:
Нам нужно сгенерировать артефакт с временной меткой, чтобы часть упаковка фаза (или где бы то ни было), вместо построения
project-1.0-SNAPSHOT.jar
мы должны строить
project-1.0-20090803125803.jar
(где
20090803125803
это всего лишьYYYYMMDDHHMMSS
отметка времени, когда jar будет создан ).Единственное реальное требование заключается в том, чтобы временная метка была частью имени файла сгенерированного файла.
Одна и та же временная метка должна быть включена в версия.свойства файл внутри сгенерированного jar.
Эта информация включена в сгенерированный пом.свойства когда вы бежите,
например, mvn package
но закомментирован:
#Generated by Maven
#Mon Aug 03 12:57:17 PDT 2009
Любые идеи о том, с чего начать, были бы полезны!Спасибо!
Решение
Версии Maven 2.1.0-M1 или новее имеют встроенную специальную переменную maven.build.timestamp
.
<build>
<finalName>${project.artifactId}-${project.version}-${maven.build.timestamp}</finalName>
</build>
Смотрите Maven Документация для получения более подробной информации.
Для более старых версий Maven посмотрите на maven-временная метка-плагин или buildnumber-maven-плагин.
Если вы используете maven-timestamp-plugin, вы можете использовать что-то вроде этого для манипулирования результирующим именем артефакта.
<build>
<finalName>${project.artifactId}-${project.version}-${timestamp}</finalName>
</build>
И эта конфигурация для buildnumber-maven-plugin должна создать свойство ${timestamp}, которое содержит значение timestamp.Похоже, не существует способа создать версия.свойства файл непосредственно с помощью этого плагина.
<configuration>
<format>{0,date,yyyyMMddHHmmss}</format>
<items>
<item>timestamp</item>
</items>
</configuration>
Другие советы
Если вы используете версию Maven >= 2.1.0-M1, то вы можете использовать свойство ${maven.build.timestamp}.
Для получения дополнительной информации смотрите:http://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Available_Variables
Если вам нужно время в часовом поясе, отличном от UTC (по умолчанию при использовании ${maven.build.timestamp}
) вы могли бы использовать build-helper-maven-plugin
.Смотрите больше в Краткие примеры того, как использовать цели плагина Build Helper Maven для сборки.
Во всяком случае, вот как у меня получилось временная метка в GMT-5 и вписать это в окончательное название моего артефакта:
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.9.1</version>
<executions>
<execution>
<id>timestamp-property</id>
<goals>
<goal>timestamp-property</goal>
</goals>
<configuration>
<name>current.time</name>
<pattern>yyyyMMdd-HHmmss</pattern>
<timeZone>GMT-5</timeZone>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<finalName>${project.name}-${current.time}</finalName>
</configuration>
</plugin>
</plugins>
</build>
Этот пост (особенно приведенная ниже часть) также очень полезен и практичен для решения этой проблемы.
Отметка номера версии и времени сборки в файле свойств с помощью Maven
Помпон будет выглядеть примерно так
...
<properties>
....
<!-- Timestamp of build -->
<timestamp>${maven.build.timestamp}</timestamp>
<maven.build.timestamp.format>yyyy_MM_dd_HH_mm</maven.build.timestamp.format>
</properties>
...
<build>
<finalName>${project.artifactId}-${project.version}-${timestamp}</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
....
</plugin>
</plugins>
</build>
....
и имя пакета такое MyProject-1.0. 0-2015_03_02_13_46.war
При развертывании проекта МОМЕНТАЛЬНОГО снимка по умолчанию используется временная метка, если вы не переопределите ее в развертывание плагина.Если вы не получаете уникальных временных меток, вероятно, это связано с конфигурацией вашего репозитория Maven.Однако, как говорится в другом ответе, используйте плагин timestamp или buildnumber для релизов.
Нам нужен более новый ответ :) Сейчас он встроен: http://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Available_Variables
использование ${maven.build.timestamp}