我试图找出 Maven 是否有一些可用于为工件加时间戳的内置插件。我创建了一个程序集文件,并使用 maven-assembly 插件来创建最终发行版(jar、文档、脚本等)。我想将此分发文件命名为 domain_year_month_day.zip。如何将时间戳的日期部分附加到正在生成的最终 zip 文件的末尾。谢谢。
4 回答
您不需要使用较新版本的 maven 的 maven-timestamp-plugin。从 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/guides/introduction/introduction-to-the-pom.html。
您可以使用maven-timestamp-plugin设置一个属性(例如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>
作为替代方案,您可以使用GMaven 插件将一些 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 生成资源 [INFO] 正在扫描项目... [信息] ... [信息] --- gmaven-plugin:1.3:execute (set-custom-property) @ Q4081274 --- [信息] [信息] --- gmaven-plugin:1.3:execute (show-custom-property) @ Q4081274 --- 11_02_10 [信息] --------------------------------------------- ------------------------- [信息] 构建成功 [信息] --------------------------------------------- ------------------------- ...
同样,稍后在程序集的构建名称中使用此属性。
在${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} 来获取你想要编辑的任何属性文件的时间戳。
哈德森/詹金斯支持的其他环境变量的信息,看看这里: http ://wiki.hudson-ci.org/display/HUDSON/Building+a+software+project