【发布时间】:2010-11-15 15:52:42
【问题描述】:
我正在尝试找出最好的方法来设置我们的多模块 Apache Maven 项目,这种方式允许模块的不同发布周期,并且在调试项目时不会引入依赖问题。
我们目前的设置如下:
- 大系统@1.2
- parent-1.1-SNAPSHOT
- 模块 a@1.4-SNAPSHOT
- 以 parent@1.1-SNAPSHOT 为父
- 模块 b@1.3-SNAPSHOT
- 以 parent@1.1-SNAPSHOT 为父
- 依赖于@1.1
- 模块 c@1.1-SNAPSHOT
- 以 parent@1.1-SNAPSHOT 为父
- 依赖于@1.2
- 取决于 b@1.1
模块 b 和 c 中声明的依赖项包含编译模块所需的最低版本,不一定是模块的当前版本,也不一定是正在部署的模块的版本。
从构建的角度来看,这很好用,每个模块都可以根据需要发布/更新,但是当尝试在打开顶层 pom 的 IntelliJ IDEA(版本 8 和 9 EAP)下调试部署的应用程序时,IDEA 决定,因为我们声明了对 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 发布时会出现问题,但由于父级可能引用多个正在开发的 -SNAPSHOTS,因此无法发布它,我们最终添加版本引用回模块 pom 以满足发布。
似乎只有在我们同时发布所有捆绑包时,使用 maven 的依赖管理部分才能真正发挥作用,无论它们是否发生变化,但因为我们只想在需要时管理每个子模块的发布模型似乎不合适。
我怀疑我遗漏了一些东西,并且dependencyManagement 和版本范围的组合可能会满足要求,尽管我还没有看到版本范围正常工作。
有没有更好的方法?正确的方法?
【问题讨论】:
标签: java maven-2 intellij-idea