Как омрачить выходной артефакт в Maven?
-
28-09-2019 - |
Вопрос
Я пытаюсь выяснить, имеет ли Maven встроенный плагин, который можно использовать для артефактов Time-Stamp. Я создал файл сборки и использую плагин Maven-Assember, чтобы создать окончательное распределение (банки, документы, скрипты и т. Д.). Я хочу назвать этот файл распространения в виде domain_year_month_day.zip. Как я могу добавить дневную часть временной метки времени на конец окончательного ZIP-файла, который производится. Спасибо.
Решение
Вы могли бы использовать Maven-Timestamp-плагин установить свойство (например, timestamp
) и используйте его позже в последнее имя вашей сборки.
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<id>create-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<finalName>domain_${timestamp}</finalName>
<descriptors>
<descriptor>src/main/assembly/my-descriptor.xml</descriptor>
</descriptors>
<attach>true</attach>
</configuration>
</execution>
</executions>
</plugin>
В качестве альтернативы, вы могли бы поставить код Groovy в свой POM, используя ГМАВЕН Плагин:
<plugin>
<groupId>org.codehaus.gmaven</groupId>
<artifactId>gmaven-plugin</artifactId>
<version>1.3</version>
<executions>
<execution>
<id>set-custom-property</id>
<phase>initialize</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<source>
def timestamp = new Date().format('MM_dd_yy')
project.properties.setProperty('timestamp', timestamp)
</source>
</configuration>
</execution>
<execution><!-- for demonstration purpose -->
<id>show-custom-property</id>
<phase>generate-resources</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<source>
println project.properties['timestamp']
</source>
</configuration>
</execution>
</executions>
</plugin>
Выходной вывод, показывающий свойство:
$ MVN Generate-Resources [info] сканирование для проектов ... [info] ... [info] --- gmaven-plugin: 1.3: EXECUTE (SET-CUSTHION-HOPPERTION) @ Q4081274 --- [info] [info] ] --- Gmaven-Plugin: 1.3: Execute (Show-Custom-handy) @ Q4081274 ----11_02_10ИНФОРМАЦИЯ] ----------------------------------------------- ------------------------------ [info] Создать успех [info] ------------------- ------------------------------------------------------- ----- ...
И снова используйте это свойство позже в названии сборки вашей сборки.
Другие советы
Вам не нужен плагин Maven-Timestamp с более новыми версиями Maven. С 2.1'ish, Maven предоставляет специальную недвижимость Maven.Build.timestamp.
Вы устанавливаете формат в свойствах POM с чем-то вроде этого:
<maven.build.timestamp.format>yyyy-MM-dd'T'HH.mm.ss</maven.build.timestamp.format>
А затем используйте $ {maven.build.timestamp}, где вам нужно свойство метки времени. Видеть http://maven.apache.org/guades/introduction/introduction-to-the-pom.html. для деталей.
Так как ${maven.build.timestamp}
Кажется Багги в Maven, обходной путь выглядит следующим образом:
Создать новую переменную (я выбрал «build.timestamp», здесь) - И, необязательно, укажите формат:
Pom.xml.
<project>
...
<properties>
...
<build.timestamp>${maven.build.timestamp}</build.timestamp>
<maven.build.timestamp.format>yyyyMMdd</maven.build.timestamp.format>
<!-- default is: yyyyMMdd-HHmm -->
</properties>
<build>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptors>
<descriptor>some-assembly.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>make</id>
<phase>package</phase>
<goals>
<goal>assembly</goal>
</goals>
</execution>
</executions>
</plugin>
...
Используйте пользовательскую переменную из любой точки:
Некоторые ассамблеи.xml.
<?xml version="1.0"?>
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
<id>release-${build.timestamp}</id>
<baseDirectory>/</baseDirectory>
<includeBaseDirectory>false</includeBaseDirectory>
<formats>
<format>zip</format>
</formats>
<fileSets>
<fileSet>
<directory>${project.build.directory}/${project.artifactId}-${project.version}</directory>
</fileSet>
</fileSets>
</assembly>
Если вы используете HUDSON / JENKINS, вы можете просто использовать переменную $ {Build_id} для получения отметки Timestamp в любой файл свойств, который вы хотите редактировать.
Информация для других переменных окружающей среды Hudson / Jenkins поддерживает, посмотрите здесь:http://wiki.hudson-ci.org/display/hudson/Building+a+software+project