如何发布具有未发布依赖项的多模块项目

时间:2010-09-08 08:52:10

标签: java maven-2

我有一个多模块项目(扁平结构)如下

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)。实现这一目标的正确方法是什么?

由于

2 个答案:

答案 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>