Java Maven:如何阅读父POM版本

Java Maven:如何阅读父POM版本,java,maven,maven-2,Java,Maven,Maven 2,背景:我的大多数Java项目都有很多锅炉板配置,我最终将这些配置写入POM。(例如,sourceEncoding始终为UTF-8,组织详细信息永远不会更改)。为了避免复制粘贴配置块,我创建了自己的标准“父”POM,可以为每个项目扩展 我也有很多工具,我在我工作的每个Java项目中都使用这些工具(例如checkstyle、PMD等),所以我已经将每个工具的插件添加到我的标准父pom中 PMD(和其他一些工具)有一个有趣的问题——它们需要一组配置文件才能正确运行。由于Maven更喜欢使用“每个模块一

背景:我的大多数Java项目都有很多锅炉板配置,我最终将这些配置写入POM。(例如,sourceEncoding始终为UTF-8,组织详细信息永远不会更改)。为了避免复制粘贴配置块,我创建了自己的标准“父”POM,可以为每个项目扩展

我也有很多工具,我在我工作的每个Java项目中都使用这些工具(例如checkstyle、PMD等),所以我已经将每个工具的插件添加到我的标准父pom中

PMD(和其他一些工具)有一个有趣的问题——它们需要一组配置文件才能正确运行。由于Maven更喜欢使用“每个模块一个可部署资源”的概念,我创建了以下(简化)结构:

<My Template>
  |--- Config Files
  \--- Parent Pom

|---配置文件
\---母体聚甲醛
  • 我的模板:是一个由maven控制的项目,有两个模块
  • 配置文件:是一个maven模块,它将PMD配置文件捆绑到ZIP中,并将其部署到maven repo
  • 父Pom:是我所有的锅炉板代码。它依赖于“配置文件”,设置为从ZIP文件中提取配置
到目前为止还不错

要求:“父Pom”和“配置文件”总是一起构建和部署的-也就是说,“父Pom”版本1.2.3将只与“配置文件”版本1.2.3一起使用,因此当我在“父Pom”中写入依赖项时,我需要执行以下操作:

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

org.my-org
配置文件
${project.version}
拉链
测试
问题:当我启动我的应用程序(比如0.0.1版)时,我使用“父Pom”作为我的父Pom。Maven将计算项目的有效POM,${project.version}将被解释为0.0.1(应用程序版本),而不是1.2.3(父POM版本)。Maven随后无法找到配置文件

问题:我如何告诉Maven“给我POM xxx的版本”


我真正不想做的是创建与${project.version}同步的附加属性,因为我可以保证,当我们为发布而升级POM时,会忘记更新它

你可以做几件事

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

但更好的方法可能是在父pom中定义
pluginManagement
和/或
dependencyManagement
——使用适当的版本和配置。在子项目中,您只需“使用”依赖项中的“托管”版本/配置或
构建/插件
,而不指定具体的版本或配置


例如,可以看到在开源项目中广泛使用的POM。

Hi@lexicore,
${project.parent.version}
很好地完成了这项工作。我的计划是使用这个变量定义一个属性,然后在设置
pluginManagement