我们有一个反应堆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>
看起来不可靠,因为在添加新模块或依赖项时,反应器顺序可能会发生变化。
也许这种使用场景不受设计的影响,然后我想知道原因。
编辑:正如评论中所建议的那样,在父POM中声明具有子版本的全局属性可能是较新版本的Maven的选项。然而,我希望看到一些关于更广泛后果的分析,如工作流,发布,目录和存储库设置,一些插件使用(例如版本插件)等。例如,我认为这种方法的直接后果是我必须释放父模块释放任何子模块时。虽然这是可行的,但它会影响独立版本化的最初想法。
答案 0 :(得分:0)
我建议在父pom中使用dependencyManagement。您可以在那里定义所有依赖项的所有de版本。 然后,您可以省略不同模块中的依赖项版本
所以在父母:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>mygroup</groupId>
<artifactId>myModule</artifactid>
<version>1.2.3</version>
</dependency>
</dependencies>
</dependencyManagement>
然后在模块中使用
<dependencies>
<dependency>
<groupId>mygroup</groupId>
<artifactId>myModule</artifactid>
</dependency>
</dependencies>
将使用dependencyManagement中定义的版本。
我建议在父pom中定义所有依赖项的版本。
答案 1 :(得分:0)
我在Maven mailing list上创建了一个关于此主题的主题,我发布了TL; DR在这里回答:
我的预期解决方案具有隐式属性通常是不可能的,因为它不仅会在构建期间进行评估,而且还会在将构建的工件用作其他项目中的依赖项时进行评估,并且它的评估可能会产生不可预测的结果,因为隐式属性的上下文完全不同。 (我很蠢,前段时间我用$ {project.version}属性也有同样的问题)
通常来说,从一个开发人员的角度来看,该问题只考虑一个项目中的一个场景。在邮件列表线程中,还有其他观点导致依赖管理或显式属性中的依赖版本号硬编码,即使其他东西是可能的。