java - Maven:如何读取父 POM 版本

标签 java maven maven-2

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

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

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

<My Template>
  |--- Config Files
  \--- Parent Pom
  • 我的模板:是一个由两个模块组成的 maven 控制项目
  • Config Files: 是一个 maven 模块,它将 PMD 配置文件打包成 ZIP 并将它们部署到 maven repo
  • Parent Pom: 是我所有的样板代码。它依赖于“配置文件”,并设置为从 ZIP 中提取配置

到目前为止一切顺利....

要求:“Parent Pom”和“Config Files”始终一起构建和部署 - 即“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 时我们会忘记更新它!

最佳答案

您可以做一些事情。

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

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

例如,请参阅 org.sonatype.oss:oss-parent开源项目中广泛使用的POM。

关于java - Maven:如何读取父 POM 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40979198/

相关文章:

java - Jersey Rest Web 服务重定向到同一页面

java - Spring 的正确版本或 jackson 是什么?

java - 如何仅使用命令行运行 Maven 创建的 jar 文件

maven - 无法解析类org.jenkinsci.plugins.workflow.support.steps.build.DownstreamFailureCause

java - 当我只得到最终的 .jar 时如何使用 Maven 部署 Artifact ?

maven-2 - 在 Maven 站点生成的 html 中添加到 JavaDoc 的动态链接

maven-2 - 使用 maven-bundle-plugin 将 JAR 嵌入到 OSGi 包中

java - JBoss 和一个单独的 TomCat 在同一台机器上

java - Final关键字的使用

java - 如何动态播放JavaFX动画