【问题标题】:Maven: How to read the Parent POM versionMaven:如何读取父 POM 版本
【发布时间】:2016-12-05 16:47:41
【问题描述】:

背景:我的大部分 Java 项目都有很多样板配置,我最终将它们写入我的 POM。 (例如 sourceEncoding 总是 UTF-8,组织细节永远不会改变)。为了省去复制粘贴配置块的麻烦,我创建了自己的标准“父”POM,我可以为每个项目扩展。

我在我从事的每个 Java 项目中都使用了许多工具(例如 checkstyle、PMD 等),因此我已将每个工具的插件添加到我的标准父 pom.xml 中。

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

<My Template>
  |--- Config Files
  \--- Parent Pom
  • 我的模板: 是一个包含两个模块的 Maven 控制项目
  • 配置文件: 是一个 maven 模块,它将 PMD 配置文件捆绑到 ZIP 中并将它们部署到 maven 存储库
  • Parent 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>

问题:当我开始我的应用程序(比如说版本 0.0.1)时,我使用“Parent Pom”作为我的父级。 Maven 将计算项目的有效 POM,${project.version} 将被解释为 0.0.1(应用程序版本)而不是 1.2.3(父 POM 版本)。然后 Maven 找不到配置文件。

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

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

【问题讨论】:

    标签: java maven maven-2


    【解决方案1】:

    您可以做一些事情。

    您可以使用${project.parent.version} 代替${project.version}

    但可能更好的方法是在您的父 pom 中定义 pluginManagement 和/或 dependencyManagement - 使用适当的版本和配置。在您的子项目中,您只需“使用”dependenciesbuild/plugins 中的“托管”版本/配置,而无需指定具体版本或配置。

    例如查看在开源项目中广泛使用的org.sonatype.oss:oss-parent POM。

    【讨论】:

    • 嗨@lexicore,${project.parent.version} 做得很好。我的计划是使用此变量定义一个属性,然后在设置 pluginManagement 时引用它
    猜你喜欢
    • 2017-02-22
    • 2019-07-24
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 2020-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多