【发布时间】: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 时我们会忘记更新它!
【问题讨论】: