【发布时间】:2011-07-07 05:00:43
【问题描述】:
假设我们有 3 层项目。 DB、业务、Web 和聚合 pom。
Project
|-DB
| |-pom.xml
|-Business
| |-pom.xml
|-pom.xml
所有模块都要一起发布和分支,所以聚合器 pom 被配置为将相同的版本分配给所有子模块。我们有以下版本:
DB-0.1-SNAPSHOT
Business-0.1-SNAPSHOT which depends on DB-0.1-SNAPSHOT
Web-0.1-SNAPSHOT which depends on Business-0.1-SNAPSHOT
在做release:prepare时,所有版本都更新到0.1,但是由于还没有DB-0.1依赖,准备失败。
一种解决方案是为每个模块创建不同的项目并一个一个发布,同时使用versions:use-releases插件更新依赖到0.1
但我不喜欢这个想法,因为它需要大量的配置和脚本。因此,我更喜欢使用聚合并使用单个命令发布所有模块,但问题是,正如我上面所写,当发布插件尝试构建 Business-0.1 时,存储库中还没有 DB-0.1。
有没有办法管理这些项目间的依赖关系?
谢谢。
更新:
即使安装目标失败。
- 数据库构建 - 正常(任何存储库中都没有快照或发布版本)
- 业务 - 失败(在存储库中未找到 DB-0.1-SNAPSHOT。但它甚至不应该存在!)
我正在使用 maven 3.0.2 并发布插件 2.1
【问题讨论】:
-
您已将 Business 和 DB 列为父 POM 的模块,对吗?而且您正在父 POM 上运行 release:prepare only ,对吗?您描述的功能通常是开箱即用的。
-
是的,它运行 IF 业务依赖于存储库中已经存在的一些旧版本的数据库。但是,如果您尝试引用无法在存储库中的新版本,因为它甚至还没有构建,那么不,它不起作用..
-
它不需要在 repo 中 - Maven 将首先查看它的“反应器”(即当前构建的模块)。
标签: maven aggregation dependency-management maven-release-plugin multi-module