2016-12-05 936 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