如何发布具有项目间依赖性的Maven多模块项目?

Dim*_*ima 6 aggregation dependency-management maven multi-module maven-release-plugin

让我们说我们有3层项目.数据库,业务,Web和聚合pom.

Project  
|-DB  
| |-pom.xml  
|-Business  
| |-pom.xml  
|-pom.xml
Run Code Online (Sandbox Code Playgroud)

所有模块都可以一起发布和分支,因此Aggregator 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  
Run Code Online (Sandbox Code Playgroud)

这样做时release:prepare,所有版本都更新为0.1,但是准备失败,因为还没有DB-0.1依赖.

一种解决方案是为每个模块创建不同的项目,并逐个释放它们,同时使用versions:use-releases插件将依赖项更新为0.1

但我不喜欢这个想法,因为它需要大量的配置和脚本.所以,我更喜欢使用的聚集和释放与单个命令所有模块,但问题是,正如我上面写的,当发布插件试图建立Business-0.1没有DB-0.1在版本库中.

有没有办法管理这些项目间的依赖关系?

谢谢.

UPD:

甚至安装目标失败.

  1. 数据库构建 - 确定(任何存储库中都没有快照或发行版本)
  2. 业务 - 失败(在存储库中找不到DB-0.1-SNAPSHOT.但它甚至不应该存在!)

我正在使用maven 3.0.2并发布插件2.1

khm*_*ise 4

您的项目应该仅在父(项目)中定义版本一次。并让所有其他模块都有父关系。这意味着您没有聚合。相反,您有一个多模块构建。

Project  
|-pom.xml (version 0.1-SNAPSHOT)
|-DB  
| |-pom.xml (parent: ..)
|-Business  
| |-pom.xml (parent:..)
Run Code Online (Sandbox Code Playgroud)

这将解决您的问题(也许您可以看一下这里作为示例)。

  • 这个答案没有解决一个模块(例如业务)如何依赖另一个模块(例如数据库)并在发布过程中自动更新该依赖关系。 (3认同)
  • 同意,这个答案根本没有解决这个问题。 (2认同)