gpt4 book ai didi

maven - 扁平化插件 : Resolve dependencyManagement of bom without inherited

转载 作者:行者123 更新时间:2023-12-04 04:22:16 24 4
gpt4 key购买 nike

我为这个问题创建了一个示例项目:https://github.com/robeatoz/flatten-resolve-dependency-management-without-inherited

给出以下项目结构:

  • 富建作为所有模块的父级
  • foo 模块-a 作为子模块
  • foo-module-b 作为子模块
  • foo-module-c 作为子模块
  • foo 依赖项 作为出生

  • 我使用了 flatten-maven-plugin 和属性 revision对于所有模块中的 CI 友好构建:

    <groupId>stack.overflow</groupId>
    <artifactId>foo-build</artifactId>
    <version>${revision}</version>
    <packaging>pom</packaging>

    <properties>
    <revision>0.1-SNAPSHOT</revision>
    </properties>

    父级 (foo-build) 管理一个外部依赖项:

    <dependencyManagement>
    <dependencies>
    <dependency>
    <groupId>external.artifact</groupId>
    <artifactId>module-managed-in-parent</artifactId>
    <version>1.2.3</version>
    </dependency>
    </dependencies>
    </dependencyManagement>

    bom (foo-dependencies) 管理 foo 依赖项:

    <dependencyManagement>
    <dependencies>
    <dependency>
    <groupId>stack.overflow</groupId>
    <artifactId>foo-module-a</artifactId>
    <version>${revision}</version>
    </dependency>
    <dependency>
    <groupId>stack.overflow</groupId>
    <artifactId>foo-module-b</artifactId>
    <version>${revision}</version>
    </dependency>
    <dependency>
    <groupId>stack.overflow</groupId>
    <artifactId>foo-module-c</artifactId>
    <version>${revision}</version>
    </dependency>
    </dependencies>
    </dependencyManagement>

    我希望 bom 的扁平化 pom 仅包含已解析的 foo 依赖项,而没有由父级(foo-build)管理的依赖项,如下所示:

    <dependencyManagement>
    <dependencies>
    <dependency>
    <groupId>stack.overflow</groupId>
    <artifactId>foo-module-a</artifactId>
    <version>0.1-SNAPSHOT</version>
    </dependency>
    <dependency>
    <groupId>stack.overflow</groupId>
    <artifactId>foo-module-b</artifactId>
    <version>0.1-SNAPSHOT</version>
    </dependency>
    <dependency>
    <groupId>stack.overflow</groupId>
    <artifactId>foo-module-c</artifactId>
    <version>0.1-SNAPSHOT</version>
    </dependency>
    </dependencies>
    </dependencyManagement>

    你必须如何配置 flatten-maven-plugin 来实现这一点?

    我已经尝试过 <flattenMode>bom</flattenMode> ,但随后扁平化的 pom 无法解析版本:

    <dependencyManagement>
    <dependencies>
    <dependency>
    <groupId>stack.overflow</groupId>
    <artifactId>foo-module-a</artifactId>
    <version>${revision}</version>
    </dependency>
    <dependency>
    <groupId>stack.overflow</groupId>
    <artifactId>foo-module-b</artifactId>
    <version>${revision}</version>
    </dependency>
    <dependency>
    <groupId>stack.overflow</groupId>
    <artifactId>foo-module-c</artifactId>
    <version>${revision}</version>
    </dependency>
    </dependencies>
    </dependencyManagement>

    使用以下配置

    <pomElements>
    <properties>remove</properties>
    <dependencyManagement>resolve</dependencyManagement>
    </pomElements>

    扁平化的 pom 包含父级的托管依赖项:

    <dependencyManagement>
    <dependencies>
    <dependency>
    <groupId>stack.overflow</groupId>
    <artifactId>foo-module-a</artifactId>
    <version>0.1-SNAPSHOT</version>
    </dependency>
    <dependency>
    <groupId>stack.overflow</groupId>
    <artifactId>foo-module-b</artifactId>
    <version>0.1-SNAPSHOT</version>
    </dependency>
    <dependency>
    <groupId>stack.overflow</groupId>
    <artifactId>foo-module-c</artifactId>
    <version>0.1-SNAPSHOT</version>
    </dependency>
    <dependency>
    <groupId>external.artifact</groupId>
    <artifactId>module-managed-in-parent</artifactId>
    <version>1.2.3</version>
    </dependency>
    </dependencies>
    </dependencyManagement>

    最佳答案

    将您的方法更改为更加以客户为中心会更简单:

  • 制作 foo 依赖项 一个根项目(./pom.xml)。
  • 只有 foo-*依赖管理部分中的依赖
  • 带有单个 的模块列表富建模块(会被 flatten 插件截断)
  • 通用项目属性(会被 flatten 插件截断)
  • 制作 富建一个中间项目(./foo-build/pom.xml)。
  • 在依赖管理部分有第三方依赖
  • 具有项目所需的特定于构建的属性或配置文件(如果有)
  • 保留 foo 模块-* 带有 的叶模块富建作为家长

  • 如果你坚持简单的项目结构( ./foo-module-*/pom.xml ),你可以使用 relativePath指向父模块,例如:
    <parent>
    <groupId>stack.overflow</groupId>
    <artifactId>foo-build</artifactId>
    <version>${revision}</version>
    <relativePath>../foo-build/pom.xml</relativePath>
    </parent>

    <artifactId>foo-module-a</artifactId>

    这样您将收到:
  • 清除 foo 依赖项 如你所愿;
  • foo-* 的零复制粘贴依赖关系;
  • 中灵活地构建任何你喜欢的东西富建 没有副作用foo 依赖项 (现在和将来都不是)。
  • 关于maven - 扁平化插件 : Resolve dependencyManagement of bom without inherited,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58840467/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com