代码之家  ›  专栏  ›  技术社区  ›  vladfau

Maven没有在多模型项目中构建兄弟依赖关系

  •  0
  • vladfau  · 技术社区  · 6 年前

    我有一个多模块项目,在根POM中,我有:

    <modules>
        <module>shared-lib1</module>
        <module>shared-lib2</module>
        <module>main-app</module>
    </modules>
    

    在里面 main-app 模块我列出了我的库,如下所示:

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

    通用构建命令为 mvn deploy -pl <changedList> -am -amd

    当我的Jenkins automation检测到push-to分支上的更改时,它会分析从哪个模块更改的文件。因此,仅举个例子 shared-lib1 已更改。

    在这种情况下,命令将是 mvn deploy -pl shared-lib1 -am -amd ,这将 主应用程序 进入反应堆项目清单 -amd 选项

    但是,它不会恢复 shared-lib2 主应用程序 将无法构建。

    是否有任何选项可以正确构建树,因此基本上启用 -am 由发现的所有模块的选项 -amd公司 ?

    UPD: ${project.version} 每次都会更新为包含提交的SHA

    1 回复  |  直到 6 年前
        1
  •  0
  •   vladfau    5 年前

    因为没有人回答这个问题:这是Maven的预期行为,也是它构建模块图的方式。我曾尝试创建自己的graph builder,它本应转换为Maven builder,但我早就放弃了这项活动:

    https://gist.github.com/vladfau/eb34e4f3892d0207e399a0f1f84f83ff

    这是为Jenkins管道编写的,所以有一些CPS扩展。最值得注意的方法是 generateFullDependencyList