背景:我的大多数Java项目都有很多样板配置,我最终写入了我的POM。 (例如,sourceEncoding始终为UTF-8,组织详细信息永远不会更改)。为了节省复制粘贴配置块,我创建了自己的标准“父”POM,我可以扩展每个项目。
我在我工作的每个Java项目中都使用了很多工具(例如checkstyle,PMD等),所以我将每个工具的插件添加到我的标准父pom中。
PMD(和其他一些工具)有一个有趣的问题 - 它们需要一组配置文件才能正常运行。由于Maven更喜欢使用“每个模块一个可部署资源”的概念,因此我创建了以下(简化)结构:
<My Template>
|--- Config Files
\--- Parent Pom
到目前为止一直很好......
需求:“父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用于发布时,我们将忘记更新它!
答案 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
- 使用适当的版本和配置。在您的子项目中,您只需“使用”dependencyManagement
或dependencies
中的“托管”版本/配置,而无需指定具体版本或配置。
例如,请参阅开源项目中广泛使用的org.sonatype.oss:oss-parent
POM。