2016-12-05 115 views
0

背景:我大部分的Java項目有很多鍋爐板配置的,我寫出來了我的POM。 (例如,sourceEncoding始終是UTF-8,組織細節永遠不會改變)。爲了節省不得不復制粘貼配置塊的功能,我創建了自己的標準「父」POM,可以擴展我的每個項目。我也在我工作的每個Java項目中使用了很多工具(例如checkstyle,PMD等),所以我已經將每個工具的插件添加到我的標準父pom中。Maven的:如何讀取父POM版本

PMD(以及一些其他工具)有一個有趣的問題 - 他們需要一組配置文件才能正常工作。由於Maven的喜歡與「每個模塊一個部署資源」的概念來工作,我已經創建了以下(簡化)結構:

<My Template> 
    |--- Config Files 
    \--- Parent Pom 
  • 我的模板:是兩個模塊
  • 行家控制項目
  • 配置文件:是一個Maven模塊捆綁的PMD配置文件成ZIP,並將其部署到一個Maven回購
  • 父POM:是我所有的鍋爐板代碼。它的「配置文件」的依賴,並設置爲從ZIP

到目前爲止好提取配置....

的需求量的:「父POM」和「配置文件「一直是一起構建和部署的 - 即」Parent Pom「1.2.3版本只能用於」Config Files「1.2.3版本,所以當我在」Parent POM「中編寫依賴項時,我需要做類似:

<dependency> 
    <groupId>org.my-org</groupId> 
    <artifactId>config-files</artifactId> 
    <version>${project.version}</version> 
    <type>zip</type> 
    <scope>test</scope> 
</dependency> 

問題:當我開始我的應用程序(假設版本爲0.0.1)時,我使用「Parent Pom」作爲我的父項。 Maven將計算項目的有效POM,$ {project.version}將被解釋爲0.0.1(應用程序版本),而不是1.2.3(父級POM版本)。 Maven然後無法找到配置文件。

問題:如何告訴Maven「給我POM xxx的版本」?

我真的不要做的是創建與$ {project.version}同步的其他屬性,因爲我可以保證我們會在發佈POM的時候忘記更新它!

回答

1

有一些事情可以做。

可以使用${project.parent.version},而不是${project.version}

但可能更好的方法是在您的父pom中定義pluginManagement和/或dependencyManagement - 使用適當的版本和配置。在你孩子的項目,你只是「用」在dependenciesbuild/plugins的「管理」版本/配置沒有具體的版本或配置的規範。

例如參見org.sonatype.oss:oss-parent POM其被廣泛用於開源項目。

+0

嗨@lexicore,'$ {project.parent.version}'很好地完成了這項工作。我的計劃是使用這個變量定義一個屬性,然後在設置'pluginManagement'時引用它 – Stormcloud