gpt4 book ai didi

java - 如何正确设置具有滑动发布周期的多模块 Maven 项目

转载 作者:搜寻专家 更新时间:2023-10-30 21:10:26 25 4
gpt4 key购买 nike

我正在尝试找到设置我们的多模块 Apache Maven 项目的最佳方法,该方法允许不同的模块发布周期,并且在调试项目时不会引入依赖性问题。

我们目前的设置如下:

  • 大系统@1.2
    • parent-1.1-快照
    • 模块 a@1.4-快照
      • 以 parent@1.1-SNAPSHOT 为父
    • 模块 b@1.3-SNAPSHOT
      • 以 parent@1.1-SNAPSHOT 为父
      • 依赖于@1.1
    • 模块 c@1.1-SNAPSHOT
      • 以 parent@1.1-SNAPSHOT 为父
      • 依赖于a@1.2
      • 取决于 b@1.1

模块 b 和 c 中声明的依赖项包含编译模块所需的最低版本,不一定是模块的当前版本,也不一定是正在部署的模块的版本。

从构建的角度来看,这很有效,每个模块都可以根据需要发布/更新,但是当尝试在打开顶级 pom 的 IntelliJ IDEA(版本 8 和 9 EAP)下调试已部署的应用程序时,IDEA 决定 self 们声明了对 a@1.2 的依赖,无论何时我们进入 a 的类之一,它都应该从 a-1.2-sources.jar 打开它,而不是项目中当前的 a@1.4 源。进入 b 的任何类都会将我们带到 b@1.1 而不是 b@1.3,这一事实进一步混淆了这一点。

我最初尝试解决这个问题是在父 pom 的 dependencyManagement 部分声明版本号,让子模块继承版本。这在一定程度上解决了 IDEA 调试问题,因为 dependencyManagement 部分可以将每个人指向当前的 -SNAPSHOT 版本。

不幸的是,由于必须在发布模块之前释放父 pom,因此在执行 maven 发布时会导致问题,但由于父 pom 可能引用多个开发中的 -SNAPSHOTS,因此无法发布,我们最终添加版本引用回模块 pom 以满足发布。

似乎只有当我们同时发布所有包时,使用 maven 的 dependencyManagement 部分才真正有效,不管它们是否改变,但因为我们只想在需要时管理每个子模块的发布模型似乎不合适。

我怀疑我遗漏了一些东西,并且 dependencyManagement 和版本范围的组合可能会满足我们的要求,尽管我还没有看到版本范围正常工作。

有没有更好的方法?正确的方法?

最佳答案

我建议不要让它们成为模块,而是让它们的 POM 独立。这样您就不必担心尝试满足父 POM 依赖项。由于它们是独立发布的,因此它们确实应该具有独立的项目对象模型。将 Apache Commons 视为一个模板。

关于java - 如何正确设置具有滑动发布周期的多模块 Maven 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1210187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com