Comment horodater un artefact de sortie dans Maven?
-
28-09-2019 - |
Question
J'essaie de savoir si Maven a un certain plug-in intégré qui peut être utilisé pour des objets d'horodatage. J'ai créé un fichier d'assemblage et je utilise le plugin maven-assemblage pour créer une distribution finale (pots, docs, scripts, etc.). Je veux nommer ce fichier de distribution comme domain_year_month_day.zip. Comment puis-je ajouter la partie jour d'un horodatage à la fin du fichier zip final qui est en cours de production. Merci.
La solution
Vous pouvez utiliser le maven-plugin-horodatage pour définir un la propriété (par exemple timestamp
) et de l'utiliser plus tard dans le nom final de l'assemblage.
<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>
Comme alternative, vous pouvez mettre un peu de code Groovy dans votre POM en utilisant GMaven plug-in :
<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>
Un exemple de sortie représentant la propriété:
$ mvn generate-resources [INFO] Scanning for projects... [INFO] ... [INFO] --- gmaven-plugin:1.3:execute (set-custom-property) @ Q4081274 --- [INFO] [INFO] --- gmaven-plugin:1.3:execute (show-custom-property) @ Q4081274 --- 11_02_10 [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ ...
Et encore, utiliser cette propriété plus tard au nom de la construction de votre assemblée.
Autres conseils
Vous n'avez pas besoin-horodatage-plugin Maven avec les nouvelles versions de Maven. Depuis 2.1'ish, Maven a fournir la maven.build.timestamp propriété spéciale.
Vous définissez le format dans les propriétés de pom avec quelque chose comme ceci:
<maven.build.timestamp.format>yyyy-MM-dd'T'HH.mm.ss</maven.build.timestamp.format>
Et puis utilisez $ {} maven.build.timestamp où vous avez besoin d'une propriété d'horodatage. Voir http://maven.apache.org/guides/introduction/introduction-to-the -pom.html pour plus de détails.
Comme ${maven.build.timestamp}
semble buggy maven, la solution de contournement est la suivante:
Créer une nouvelle variable (j'ai choisi "build.timestamp", ici) - et, le cas échéant, spécifiez le format:
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>
...
Utilisez la variable personnalisée où que vous soyez:
certains-assembly.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>
si vous utilisez Hudson / Jenkins vous pouvez simplement utiliser la variable $ {} BUILD_ID pour obtenir sorte d'horodatage à tout fichier de propriétés u à modifier.
information aux autres variables d'environnement de soutien Hudson / Jenkins, un coup d'oeil ici: http://wiki.hudson-ci.org/display/HUDSON / bâtiment + a + logiciel + projet