【问题标题】:How to release a multi-module project with non released dependencies如何发布具有未发布依赖项的多模块项目
【发布时间】:2010-09-08 08:52:10
【问题描述】:

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

parentpom (1.1-SNAPSHOT) moduleA(继承 parentpom 版本,依赖于 moduleB(1.1-SNAPSHOT)) moduleB(继承 parentpom 版本) 聚合器(继承 parentpom 版本,聚合模块 A,模块 B)

聚合器允许我同时构建、安装和部署模块 A 和模块 B,并且似乎符合我的预期。

当我尝试发布 1.1 版本时,我不能,因为 moduleA 依赖于 moduleB(1.1-SNAPSHOT),导致以下错误:“Can't release project due to unreleased dependencies”

我认为使用聚合器可以让我对 moduleA 和 moduleB 进行“同步”发布,自动更新 moduleA 以依赖于 moduleB(1.1)。实现这一目标的正确方法是什么?

谢谢

【问题讨论】:

    标签: java maven-2


    【解决方案1】:

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

    要严格回答这个问题,这是不可能的,至少使用 Maven 发布插件是不可能的。如果您不使用 Maven 发布插件并手动进行发布,那么无论如何您都不应该这样做。

    原因:发布的构建应该是可重复的,稍后从其源构建它应该给出完全相同的结果。在一些已发布的 POM 中拥有一些 SNAPSHOT 依赖项完全违背了这个目标。这就是 Maven 发布插件强制执行此操作的原因。

    我认为使用聚合器可以让我对 moduleA 和 moduleB 进行“同步”发布,自动更新 moduleA 以依赖于 moduleB(1.1)。实现这一目标的正确方法是什么?

    版本是硬编码的吗?如果是,这可能是问题所在。

    • moduleB 和 moduleA 不应该声明任何版本,它们从父 POM 继承它

    • moduleA 应该使用内置属性来声明它对 B 的依赖

      <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>moduleB</artifactId>
        <version>${project.version}</version>
      </dependency>
      

    【讨论】:

    • 只是为了确保我能正确理解它,moduleB 和 moduleA 不应该声明任何版本,它们从父 POM 继承它,你的意思是在依赖项部分, 正确的?也就是说,moduleA 仍然有一个 &lt;project ...&gt;&lt;version&gt;X.X-SNAPSHOT&lt;/version&gt;&lt;/project&gt; 元素。如果没有,我做错了什么......
    【解决方案2】:

    我在this thread helped me (see also the example code that is linked)遇到了类似的问题和第一个答案

    答案基本上是将所有模块添加到父 pom 的依赖项管理中,然后从模块中的“模块间”依赖项中删除任何版本信息。

    例如

    父pom:

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

    【讨论】:

      猜你喜欢
      • 2011-07-07
      • 2013-12-03
      • 2016-09-30
      • 2015-01-05
      • 1970-01-01
      • 2012-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多