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

mav*_*00b 11 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).实现这一目标的正确方法是什么?

谢谢

Pas*_*ent 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>
    
    Run Code Online (Sandbox Code Playgroud)