我使用maven 3.0.4,并想使编译时间戳访问我的应用程序。 对于这一点,我把一个占位符在.properties
文件,并让行家过滤器上积聚。 虽然这种工作正常为${project.version}
${maven.build.timestamp}
不是取代上过滤。
该物业似乎是可在建设 - 我可以用它来修改工件名称:
<finalName>${project.artifactId}-${maven.build.timestamp}</finalName>
那么,为什么它不适用于资源筛选? 而且,更重要的是,我怎么让它访问?
我发现这篇文章 ,解释说,由于在Maven的错误 ,编译时间戳不会被传播到过滤。 解决方法是包裹时间戳另一个属性:
<properties>
<timestamp>${maven.build.timestamp}</timestamp>
<maven.build.timestamp.format>yyyy-MM-dd HH:mm</maven.build.timestamp.format>
</properties>
作品如预期过滤然后
buildTimestamp=${timestamp}
为了丰富内容#2为他人,也像我一样,发现这个帖子,以此来解决的“问题” ${maven.build.timestamp}
。 这不是一个Maven的错误,但M2E的预期行为,如中可以看到这个帖子 。
因此,我认为,我们不能指望解决方案被“修正”,因为从我的理解,修正涉及到概念问题。
就我而言,我所做的是使用的插件( buildnumber-maven-plugin
在此描述的) 其他职位 。
我可以作为Maven的3.X的确认{maven.build.timestamp}
是“工作”了。 他们的工作arounded的问题,显然。 无需额外的properties
需要了。
但是,要小心你的“过滤”插件(Maven的资源 - 插件)是最新的。 它需要相对较新,所以如果mvn help:effective-pom
显示了旧版本(例如:2.6),它碰到的东西更新,固定对我来说,3.X例如:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<properties><timestamp>...
的解决方法是不再需要...
这也放晴了,善良的,为什么它是在工作的IntelliJ而不是命令行。 的IntelliJ可能使用自己的“修改/内部的”行家常数,因此它在那里工作,但不能从Maven的命令行。
另外请注意,如果你对你的POM添加过滤资源目录,你可能还需要“重新添加”默认的目录,它会丢失,例如:
<resource>
<directory>src/main/resources-filtered</directory> <!-- to get "maven.build.timestamp" into resource properties file -->
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/resources</directory> <!-- apparently have to add this is you have the other... -->
</resource>
NB如果你使用Spring作为启动你的父母,你必须使用@ maven.build.timestamp @ 代替 。 另外请注意,如果你使用Spring的启动有一个文件META-INF/build-info.properties
它可选地被创建的spring-boot-maven-plugin
,你可以阅读 (Spring提供了BuildProperties
豆为了方便阅读它)。
在聚甲醛项目级别添加的Maven性能简化版,考虑到正确的本地时区,所以时间戳可能会出现错误:
<properties><timestamp>${maven.build.timestamp}</timestamp></properties>
使用构建辅助性Maven的插件应用正确的时区和夏令到时间戳:
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.9.1</version>
<executions>
<execution>
<id>timestamp-property</id>
<goals>
<goal>timestamp-property</goal>
</goals>
<configuration>
<name>timestamp</name>
<pattern>yyyy-MM-dd HH:mm:ss</pattern>
<timeZone>Europe/Zurich</timeZone>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
当包装,Maven将取代任何令牌时间戳/资源文件夹,例如资源/ version.properties:
build.timestamp = $ {}时间戳
然后,您可以在您的应用程序加载该属性文件。