我有一个多模块项目(扁平结构)如下
parentpom (1.1-SNAPSHOT) moduleA (inherits parentpom version, depends on moduleB(1.1-SNAPSHOT)) moduleB (inherits parentpom version) aggregator (inherits parentpom version, aggregates moduleA, moduleB)
聚合器允许我同时构建,安装和部署moduleA和moduleB,并且看起来像我期望的那样。
当我尝试发布版本1.1时,我不能,因为moduleA依赖于moduleB(1.1-SNAPSHOT),导致以下错误:“由于未发布依赖项而无法发布项目”
我认为使用聚合器可以让我对moduleA和moduleB进行“同步”发布,自动更新moduleA以依赖于moduleB(1.1)。实现这一目标的正确方法是什么?
由于
答案 0 :(得分:3)
如何发布具有未发布依赖项的多模块项目
要严格回答这个问题,这是不可能的,至少不能使用Maven Release Plugin。如果您不使用Maven Release Plugin并手动执行发布,则无论如何都不应该这样做。
原因:发布的构建应该是可重复的,稍后从其来源构建它应该给出完全相同的结果。在一些发布的POM中有一些SNAPSHOT依赖完全违背了这个目标。这就是Maven Release Plugin强制执行此操作的原因。
我认为使用聚合器可以让我对moduleA和moduleB进行“同步”发布,自动更新moduleA以依赖于moduleB(1.1)。实现这一目标的正确方法是什么?
版本是否经过硬编码?如果是,那可能就是问题所在。
moduleB和moduleA不应该声明任何版本,他们从父POM继承它
moduleA应该使用内置属性来声明它对B
的依赖性<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>moduleB</artifactId>
<version>${project.version}</version>
</dependency>
答案 1 :(得分:0)
我遇到了类似的问题和this thread helped me (see also the example code that is linked)
中的第一个答案答案基本上是将所有模块添加到父pom的依赖关系管理中,然后从模块中的“模块间”依赖关系中删除任何版本信息。
e.g。
父母:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>some_group</groupId>
<artifactId>module_A</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>some_group</groupId>
<artifactId>module_B</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
模块A:
<dependencies>
<dependency>
<groupId>some_group</groupId>
<artifactId>module_B</artifactId>
</dependency>
</dependencies>