我有一个Maven2项目,我需要在属性文件中添加当前版本和当前日期。
对于当前版本,我使用了${project.version}
,它可以正常工作。
我的问题是如何在我的属性文件中设置当前日期(即Maven2完成构建的日期):
client.version=Version ${project.version}
client.build=???
(另外,如果我可以指定日期的格式,那将非常棒)
您可以使用Maven Buildnumber Plugin:
<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>
然后可以在属性$ {buildNumber}中找到该日期。
功能不适用于maven 2.2.1资源过滤。
见:https://issues.apache.org/jira/browse/MRESOURCES-99
但您可以在父pom中创建自定义属性:
<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
格式获取日期并将其放入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>
开箱即用,这将无法在Eclipse中使用m2e,因此您必须在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中构建时继续运行插件。
现在,当您在Eclipse内部或外部构建时,正确生成时间戳并使用资源过滤!
令人遗憾的是,功能如此简单必须如此艰难......
另一个解决方案是在pom.xml中使用Groovy(可能不像Thomas Marti提出的解决方案那样合适):
<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}
这对我有用。我想要的只是时间戳。
在pom ...
<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>
另见the buildnumber-maven-plugin documentation。
(其他答案让我特别关注Garret Wilson,但他的日食配置对我来说不是必需的,这让我忽略了他的答案,所以我发布了对我有用的东西。)
如果你想获得一个日期和一个时间的两个属性作为奖励,这就是你如何做到这一点:
<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