用Maven2过滤添加当前date

我有一个Maven2项目,我需要在属性文件中添加当前版本和当前date。

对于当前的版本,我使用了${project.version} ,它能正常工作。

我的问题是我怎样才能在我的属性文件中设置当前date(即由Maven2完成构build的date):

 client.version=Version ${project.version} client.build=??? 

(另外,如果我能指定date的格式,那将非常棒)

你可以使用Maven Buildnumber插件来实现这个function:

 <build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>buildnumber-maven-plugin</artifactId> <executions> <execution> <phase>initialize</phase> <goals> <goal>create</goal> </goals> </execution> </executions> <configuration> <doCheck>false</doCheck> <doUpdate>false</doUpdate> <timestampFormat>{0,date,yyyy-MM-dd HH:mm:ss}</timestampFormat> </configuration> </plugin> </plugins> </build> 

该date在$ {buildNumber}属性中可用。

function不适用于maven 2.2.1资源过滤。

参见: http : //jira.codehaus.org/browse/MRESOURCES-99

但是你可以在父pom中创build一个自定义属性:

 <properties> <maven.build.timestamp.format>yyMMdd_HHmm</maven.build.timestamp.format> <buildNumber>${maven.build.timestamp}</buildNumber> </properties> 

buildNumber是可以过滤到资源中的新属性。

既然Maven 2.1 M1,现在你可以做${maven.build.timestamp} ,你也可以定义${maven.build.timestamp.format}

 <properties> ... <maven.build.timestamp.format>yyyyMMdd-HHmm</maven.build.timestamp.format> ... </properties> 

Thomas Marti的回答是朝正确的方向迈出的一步,但是有一种更简单的方法,不需要在POM中<scm>声明。 使用buildnumber-maven-plugin ,但使用create-timestamp目标。 文件不清楚; 下面是以YYYY-MM-DD格式获取date并将其放入build.date属性中的情况:

 <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>buildnumber-maven-plugin</artifactId> <version>1.2</version> <executions> <execution> <phase>validate</phase> <goals> <goal>create-timestamp</goal> </goals> </execution> </executions> <configuration> <timestampFormat>yyyy-MM-dd</timestampFormat> <timestampPropertyName>build.date</timestampPropertyName> </configuration> </plugin> 

开箱即用,在使用m2e的Eclipse中无法使用,因此您必须在POM <build>部分添加以下内容:

 <pluginManagement> <plugins> <plugin> <groupId>org.eclipse.m2e</groupId> <artifactId>lifecycle-mapping</artifactId> <version>1.0.0</version> <configuration> <lifecycleMappingMetadata> <pluginExecutions> <pluginExecution> <pluginExecutionFilter> <groupId>org.codehaus.mojo</groupId> <artifactId>buildnumber-maven-plugin</artifactId> <versionRange>[1.2,)</versionRange> <goals> <goal>create-timestamp</goal> </goals> </pluginExecutionFilter> <action> <execute> <runOnConfiguration>true</runOnConfiguration> <runOnIncremental>true</runOnIncremental> </execute> </action> </pluginExecution> </pluginExecutions> </lifecycleMappingMetadata> </configuration> </plugin> </plugins> </pluginManagement> 

这告诉m2e你希望它在Eclipse中构build时运行插件。

现在,当您在Eclipse内部或外部构build时,将正确生成时间戳并使用资源过滤!

如此简单的function如此之难,真是一种遗憾。

另一个解决scheme是在pom.xml中使用Groovy(可能不如Thomas Marti提出的解决scheme):

  <build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> <plugins> <plugin> <groupId>org.codehaus.groovy.maven</groupId> <artifactId>gmaven-plugin</artifactId> <executions> <execution> <phase>validate</phase> <goals> <goal>execute</goal> </goals> <configuration> <source> import java.util.Date import java.text.MessageFormat def vartimestamp = MessageFormat.format("{0,date,yyyyMMdd-HH:mm:ss}", new Date()) project.properties['buildtimestamp'] = vartimestamp </source> </configuration> </execution> </executions> </plugin> </plugins> </build> 

然后使用buildtimestamp属性:

 client.version=${pom.version} client.build=${buildtimestamp} 

这对我有效。 我只想要的是时间戳。

在…

 <properties> <maven.build.timestamp.format>yyyyMMdd-HHmm</maven.build.timestamp.format> <dev.build.timestamp>${maven.build.timestamp}</dev.build.timestamp> </properties> ... <overlay> <groupId>mystuff</groupId> <artifactId>mystuff.web</artifactId> <filtered>true</filtered> </overlay> 

在一个JSP文件中

 <div>Built: ${dev.build.timestamp}</div> 

示例结果是…

 <div>Built: 20130419-0835</div> 

${build.time}放置在属性文件中,并在pom.xml以下内容:

 <build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>buildnumber-maven-plugin</artifactId> <version>1.3</version> <configuration> <timestampFormat>yyyy-MM-dd HH:mm:ss</timestampFormat> <timestampPropertyName>build.time</timestampPropertyName> </configuration> <executions> <execution> <phase>initialize</phase> <goals> <goal>create-timestamp</goal> </goals> </execution> </executions> </plugin> </plugins> </build> 

另请参阅buildnumber-maven-plugin文档 。


(其他的答案让我closures了,特别是Garret Wilson,但是他的eclipseconfiguration对我来说并不是必须的,这让我忽略了他的回答,所以我发布了一些对我有用的东西。)

作为一个奖励,如果你想得到两个属性一个date和一个时间,这是你如何做到这一点:

 <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>buildnumber-maven-plugin</artifactId> <version>1.3</version> <executions> <execution> <id>build.date</id> <phase>initialize</phase> <goals> <goal>create-timestamp</goal> </goals> <configuration> <timestampFormat>yyyy-MM-dd</timestampFormat> <timestampPropertyName>build.date</timestampPropertyName> </configuration> </execution> <execution> <id>build.time</id> <phase>initialize</phase> <goals> <goal>create-timestamp</goal> </goals> <configuration> <timestampFormat>yyyy-MM-dd HH:mm:ss</timestampFormat> <timestampPropertyName>build.time</timestampPropertyName> </configuration> </execution> </executions> </plugin> 

它在maven 2.1.0中适用于我

$ {} maven.build.timestamp