我使用的是maven 3.0.4,并且希望我的应用程序可以访问构建时间戳。为此,我在.properties
文件中放置了一个占位符,并让maven在构建时进行过滤。虽然这对于${project.version}
工作得很好,但在过滤时${maven.build.timestamp}
不会被替换。
该属性似乎在构建时可用--我可以用它来修改工件名称:
<finalName>${project.artifactId}-${maven.build.timestamp}</finalName>
那么为什么它不能用于资源过滤呢?更重要的是,我如何让它变得可访问?
发布于 2012-11-05 17:04:30
我发现了this article,解释说由于bug in maven的原因,构建时间戳不会传播到过滤器。解决方法是将时间戳包装在另一个属性中:
<properties>
<timestamp>${maven.build.timestamp}</timestamp>
<maven.build.timestamp.format>yyyy-MM-dd HH:mm</maven.build.timestamp.format>
</properties>
然后,过滤就会像预期的那样工作
buildTimestamp=${timestamp}
发布于 2018-10-23 08:07:15
我可以确认,从Maven3.x开始,{maven.build.timestamp}
正在“工作”。显然,他们work arounded了这个问题。不再需要额外的properties
解决方法。
但是,要注意你的“过滤”插件(maven-resources- plugin )是最新的。它需要相对较新,所以如果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常量,所以它在那里工作,但不是从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>
注意如果你使用spring boot作为你的父母,你必须使用@maven.build.timestamp@ instead。还要注意,如果您使用的是spring boot,那么有一个文件META-INF/build-info.properties
可以选择由spring-boot-maven-plugin
创建,您可以对其进行read (spring提供了一个BuildProperties
bean以方便阅读)。
发布于 2015-02-06 20:06:55
为了丰富Stackoverflow的内容,像我一样的人,找到了这篇文章来解决${maven.build.timestamp}
的“问题”。这不是maven bug,而是可以在this post中看到的m2e的预期行为。
因此,我相信我们不能期望解决方案被“纠正”,因为据我所知,纠正涉及概念问题。
在我的例子中,我所做的就是使用这个other post中描述的插件(buildnumber-maven-plugin
)。
https://stackoverflow.com/questions/13228472
复制相似问题