【发布时间】:2015-07-27 00:03:06
【问题描述】:
我们有一个反应堆 pom,它的子模块是独立版本的,即。子模块声明它自己的版本,独立于主 pom 的版本。然而,两个子模块之间存在依赖关系。应该如何将此依赖配置为始终使用 reactor pom 的实际模块声明的版本?
我希望我可以在根 pom 中设置依赖管理并使用一些隐式属性来确定子模块的版本,但我能找到最好的选择:
${session.projectDependencyGraph.sortedProjects[0].version}
或者干脆
${reactorProjects[0].version}
所以根 pom 中的依赖管理看起来像这样:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>mygroup</groupId>
<artifactId>mySubmodule</artifactid>
<version>${reactorProjects[0].version}</version>
</dependency>
</dependencies>
</dependencyManagement>
看起来不可靠,因为添加新模块或依赖项时反应器顺序可能会发生变化。
也许这种使用场景在设计上是不鼓励的,然后我想知道为什么。
编辑:正如 cmets 中所建议的,在父 POM 中声明具有子版本的全局属性可能是新版本 Maven 的一个选项。然而,我希望看到一些关于更广泛后果的分析,如工作流、发布、目录和存储库设置、一些插件使用(例如版本插件)等。例如,我认为这种方法的直接后果是我必须发布每当发布任何子模块时,父模块。虽然这是可行的,但它会影响拥有独立版本控制的最初想法。
【问题讨论】:
-
您是否尝试将模块的版本声明为根 pom 中定义的属性?
-
我能做到,问题是它是否是正确的方法。我不确定当前的最佳实践,但我认为在 maven 坐标声明中使用属性以前是一种不好的做法,甚至是不可能的。如果您正在谈论使用子版本的手动副本声明属性,那么这就是我要避免的。
-
This answer 声称它在 Maven 2.x 中是不允许的。对于此处的 Maven 3.2.1,
project/parent/version仍然如此,但它适用于project/version。如果它有效并且符合我的需要,我会使用它。
标签: maven maven-reactor