在 maven 多模块项目中,模块 d 可以通过使用版本范围(如 `[1.5,)`)或 `release` 版本标识符依赖模块 a、b、c,从而避免硬编码具体版本号,自动拉取兼容的最新可用版本。

在标准的 Maven 多模块构建中,推荐且最可靠的方式是统一管理版本——即所有子模块共享父 POM 的 ,并通过相对路径声明模块依赖。此时,模块 D 对 A、B、C 的依赖无需指定 ,Maven 会自动解析为当前构建反应堆(reactor)中的最新快照版本。例如:
com.example
module-a
com.example
module-b
✅ 这种方式仅在 同一 Maven 构建生命周期内(即执行 mvn clean install 或 mvn compile 于根目录)有效,能确保 D 始终使用 A/B/C 的当前源码最新状态,而非本地仓库中可能滞后的旧版本。
⚠️ 需注意:若强行省略 且未启用反应堆解析(如单独构建模块 D),Maven 将报错 Missing artifact。因此,“无版本依赖”本质是依赖 Maven 的多模块反应堆机制,而非语法允许省略 version 标签。
替代方案(不推荐用于内部模块):
-
版本范围:如 [2.0.0,) 表示 ≥ 2.0.0 的任意版本,适用于已发布到仓库的稳定模块,但存在不可控升级风险(如意外引入不兼容的 3.0.0);
-
RELEASE / LATEST:已被 Maven 3.5+ 官方弃用,且因仓库索引不确定性、构建不可重现等问题,严禁在生产项目中使用(参考 MNG-6297)。
✅ 最佳实践总结:
- 所有模块应归属同一父 POM,统一管理 (建议使用 -SNAPSHOT 后缀);
- 模块间依赖省略 ,依靠 Maven 反应堆自动解析;
- 构建时始终从根目录执行命令(如 mvn verify),确保反应堆完整参与;
- 禁用 RELEASE/LATEST,杜绝不可重现构建。
这样既实现了“始终使用最新代码”的目标,又保障了构建的确定性、可重复性与可维护性。