背景:我大多数的Java项目都有很多样板配置需要写入我的POM文件中(例如sourceEncoding总是UTF-8,组织细节从不改变)。为了避免复制粘贴大量的配置代码,我创建了自己的标准“父”POM文件,可以用于每个项目的继承。
我还有一些在所有Java项目中使用的工具(例如checkstyle、PMD等),因此我已经将每个工具的插件添加到了我的标准父POM文件中。
PMD(和其他一些工具)存在一个有趣的问题——它们需要一组配置文件才能正常运行。由于Maven更喜欢使用“每个模块一个可部署资源”的概念,所以我创建了以下(简化版)结构:
<My Template>
|--- Config Files
\--- Parent Pom
- 我的模板: 是一个由Maven控制的项目,包含两个模块。
- 配置文件: 是一个Maven模块,将PMD配置文件打包成ZIP并部署到Maven仓库中。
- 父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}同步的其他属性,因为我可以保证我们在发布时会忘记更新它们!
${project.parent.version}
非常好用。我的计划是使用此变量定义一个属性,然后在设置pluginManagement
时引用它。 - Stormcloud