Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Maven 扁平化插件:解决依赖性bom管理而不继承_Maven_Flatten Maven Plugin - Fatal编程技术网

Maven 扁平化插件:解决依赖性bom管理而不继承

Maven 扁平化插件:解决依赖性bom管理而不继承,maven,flatten-maven-plugin,Maven,Flatten Maven Plugin,我为此问题创建了一个示例项目: 给出了以下项目结构: foo build作为所有模块的父级 foo-module-a作为子模块 foo-module-b作为子模块 foo-module-c作为子模块 foo依赖项作为bom 我在所有模块中使用了Flatte maven插件和属性revision,用于CI友好的构建: stack.overflow 富奥大厦 ${revision} 聚甲醛 0.1-1快照 父级(foo build)管理一个外部依赖项: 外物 在父级中管理的模块 1.2.3

我为此问题创建了一个示例项目:

给出了以下项目结构:

  • foo build作为所有模块的父级
  • foo-module-a作为子模块
  • foo-module-b作为子模块
  • foo-module-c作为子模块
  • foo依赖项作为bom
我在所有模块中使用了Flatte maven插件和属性
revision
,用于CI友好的构建:

stack.overflow
富奥大厦
${revision}
聚甲醛
0.1-1快照
父级(foo build)管理一个外部依赖项:


外物
在父级中管理的模块
1.2.3
bom(foo依赖项)管理foo依赖项:


堆栈溢出
foo-module-a
${revision}
堆栈溢出
foo-module-b
${revision}
堆栈溢出
foo-module-c
${revision}
我希望bom的扁平pom只包含已解析的foo依赖项,而不包含由父级管理的依赖项(foo构建),如下所示:


堆栈溢出
foo-module-a
0.1-1快照
堆栈溢出
foo-module-b
0.1-1快照
堆栈溢出
foo-module-c
0.1-1快照
您必须如何配置FlatteMaven插件才能实现这一点

我已经尝试了
bom
,但是展平的pom无法解析版本:


堆栈溢出
foo-module-a
${revision}
堆栈溢出
foo-module-b
${revision}
堆栈溢出
foo-module-c
${revision}
使用以下配置


去除
决定
展平pom包含父级的托管依赖项:


堆栈溢出
foo-module-a
0.1-1快照
堆栈溢出
foo-module-b
0.1-1快照
堆栈溢出
foo-module-c
0.1-1快照
外物
在父级中管理的模块
1.2.3

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

  • 使foo依赖项成为根项目(
    /pom.xml

    • 仅使用依赖项管理部分中的
      foo-*
      依赖项
    • 带有单个foo build模块的模块列表(将被扁平化插件截断)
    • 通用项目属性(将被扁平化插件截断)
  • 使foo-build成为中间项目(
    /foo-build/pom.xml

    • 依赖项管理部分中的第三方依赖项
    • 具有项目所需的特定于生成的属性或配置文件(如果有)
  • 保留foo模块-*将具有foo构建的叶模块作为父模块

  • 如果坚持简单的项目结构(
    /foo module-*/pom.xml
    ),则可以使用
    相对路径
    指向父模块,例如:

    <parent>
        <groupId>stack.overflow</groupId>
        <artifactId>foo-build</artifactId>
        <version>${revision}</version>
        <relativePath>../foo-build/pom.xml</relativePath>
    </parent>
    
    <artifactId>foo-module-a</artifactId>
    
    
    堆栈溢出
    富奥大厦
    ${revision}
    ../foo build/pom.xml
    foo-module-a
    
    这样,您将收到:

    • 按照您的意愿清除foo依赖项
    • foo-*
      依赖项的零拷贝粘贴
    • foo-build中灵活构建您喜欢的任何内容和方式,不会对foo依赖项产生副作用(无论是现在还是将来)

    谢谢您的建议!对于给定的示例,您的解决方案非常好。在我的实际项目中,根项目将
    spring引导父项目
    作为具有自己的依赖项管理的父项目。由于这个原因,将
    foo依赖项
    作为根项目将很不幸没有帮助。如果没有其他人回答,我会给你奖金:)