如果子模块独立版本,如何安排maven reactor的依赖管理?

cal*_*nfo 8 maven maven-reactor

我们有一个反应堆pom,其子模块是独立版本的,即.子模块声明它自己的版本独立于主pom的版本.但是,两个子模块之间存在依赖关系.如何将此依赖项配置为始终使用由reactor pom的实际模块声明的版本?

我希望我可以在根pom中设置依赖关系管理并使用一些隐式属性来确定子模块的版本,但我能找到最好的选项:

${session.projectDependencyGraph.sortedProjects[0].version} 
Run Code Online (Sandbox Code Playgroud)

或者干脆

${reactorProjects[0].version}
Run Code Online (Sandbox Code Playgroud)

以便根pom中的依赖关系管理如下所示:

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>mygroup</groupId>
      <artifactId>mySubmodule</artifactid>
      <version>${reactorProjects[0].version}</version>
    </dependency>
  </dependencies>
</dependencyManagement>
Run Code Online (Sandbox Code Playgroud)

看起来不可靠,因为当添加新模块或依赖项时,反应器顺序可能会发生变化.

也许这种使用场景不受设计的阻碍,然后我想知道原因.

编辑:正如在注释中建议的那样,在父POM中声明具有子版本的全局属性可能是较新版本的Maven的选项.然而,我希望看到一些关于更广泛后果的分析,如工作流,发布,目录和存储库设置,一些插件使用(例如版本插件)等.例如,我认为这种方法的直接后果是我必须释放父模块释放任何子模块时.虽然这是可行的,但它会影响独立版本控制的最初想法.

cal*_*nfo 0

我在Maven 邮件列表上开始了一个关于这个主题的帖子,我在这里发布 TL;DR 答案:

我预期的隐式属性解决方案通常是不可能的,因为它不仅会在构建期间进行评估,而且在使用构建的工件作为其他项目中的依赖项时也会进行评估,并且它的评估可能会产生不可预测的结果,因为隐式属性的上下文完全不同。(我很愚蠢,我前段时间已经对 ${project.version} 属性遇到了同样的问题)

一般来说,该问题仅从一个开发人员的角度考虑一个项目中的一种场景。在邮件列表线程中,还有其他观点导致在依赖项管理或显式属性中对依赖项版本号进行硬编码,即使其他事情是可能的。