2012-11-05 45 views
77

我正在使用maven 3.0.4並希望使構建時間戳可以訪問我的應用程序。爲此,我將一個佔位符放在.properties文件中並讓maven過濾器構建。雖然這對${project.version}工作正常,但${maven.build.timestamp}在過濾時不會被替換。如何訪問資源過濾的maven.build.timestamp

屬性似乎可在建設 - 我可以用它來修改工件名稱:

<finalName>${project.artifactId}-${maven.build.timestamp}</finalName>

那麼,爲什麼它不適用於資源篩選?而且,更重要的是,我該如何使其可訪問?

回答

165

我發現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} 
+1

對於其他人來說,我遇到了問題,因爲我在Eclipse中使用了Tomcat,看起來它不能正常工作 - 替換在'target/$ {project}'文件夾中是可以的,但是在我的真正的配置Tomcat是不是使用這個文件夾... – Betlista

+3

@Betlista耶,eclipse中的服務器集成似乎使用源目錄。這是我放棄eclipse集成並使用命令行中的maven的原因之一。 – kostja

+1

鑑於在一個pom中有多個地方需要時間戳,但是格式不同(例如文件名和構建時間字符串),我怎樣才能多次使用'maven.build.timestamp.format'? –

2

爲了豐富#1含量爲他人,也像我一樣,發現這個職位的方式來解決${maven.build.timestamp}的「問題」。這不是maven錯誤,而是m2e的預期行爲,可以在this post中看到。

因此,我相信我們不能指望解決方案被「糾正」,因爲據我所知,糾正涉及到概念問題。

在我的情況下,我所做的就是使用other post中描述的插件(buildnumber-maven-plugin)。

+0

我發現'buildnumber-maven-plugin'有類似的問題,即它生成的變量只能在特定的上下文中使用,而不是過濾。通過修改執行階段或目標,您可能會也可能無法克服這一點,但內置解決方案似乎更爲簡單。 – MarkHu