Maven:如何阅读父POM版本

时间:2016-12-05 16:47:41

标签: java maven maven-2

背景:我的大多数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”和“配置文件”总是一起构建和部署 - 即“Parent Pom”版本1.2.3只能使用“Config Files”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}保持同步的其他属性,因为我可以保证,当我们将POM用于发布时,我们将忘记更新它!

1 个答案:

答案 0 :(得分:1)

你可以做一些事情。

您可以使用class Grid { enum drawMode { GRID, EROSION, RIVERS, HUMIDITY, ATMOSPHERE } drawMode activeDraw; void draw() { switch(activeDraw) { case GRID: drawGrid(); break; case EROSION: drawErosion(); break; // etc.. } void keyPressed(int key) { switch(key) { case ' ': // Cycle activeDraw to next drawMode } } 代替${project.parent.version}

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

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