gpt4 book ai didi

maven - 如何从具有所有优点的多模块 Maven 项目继承?

转载 作者:行者123 更新时间:2023-12-04 12:55:44 29 4
gpt4 key购买 nike

我找不到一个好的、可扩展的解决方案的问题:

我有一个项目可以提供给定 Artifact 的多种风格。这已被设置为一个多模块项目,目前有 3 个模块:

  • /flavor1_module
  • /flavor2_module
  • /flavor3_module

  • 问题是我还有另外 50 个项目需要以相同的方式设置,即提供 3 种风格。

    考虑的解决方案:
  • 将已经创建的多模块项目变成所有其他 50 个项目的父项目
  • 缺点:它只是行不通。保存在父模块中的指令不会被继承,因此它们不会被执行。
  • 使用 maven-archetype-plugin创建 a multi-module projecttemplate ,然后根据模板创建全部50个项目
  • 缺点:如果我需要 flavor4,我需要手动更新所有 50 个项目以添加 flavor4_module(并复制其内容)。不可扩展。
  • 将所有 flavor 的配置嵌入到单个 pom 中,并根据配置文件启用或禁用它们(即使用配置文件组合而不是通过模块继承)。然后将 50 个项目指向它,作为它们的父级。这将创建“内联”模块
  • 缺点:我需要实现我自己的机制,这些机制由开箱即用的模块提供。 (例如,在单独的目录中构建每种 flavor )。我也会失去模块提供的清晰分隔。

  • 任何想法如何做得很好?还有其他选择吗?

    谢谢,
    卢卡斯

    编辑:

    另一种选择是扩展 maven-reactor-plugin使用 reactor:inject-modules 目标,它将从外部 Artifact 下载模块定义,并将其定义附加为普通模块。这将动态创建一个新模块。然后所有 50 个项目都可以将此 pom.xml 作为其父项。

    配置看起来像这样(草稿):
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-reactor-plugin</artifactId>
    <version>1.0</version>
    <executions>
    <execution>
    <id>inject</id>
    <phase>initialize</phase>
    <goals>
    <goal>inject-modules</goal>
    </goals>
    <configuration>
    <modules>
    <module>
    <artifactId>flavour1_module</artifactId>
    <groupId>[ groupId ]</groupId>
    <version>[ version ]</version>
    </module>
    <module>
    <artifactId>flavour2_module</artifactId>
    <groupId>[ groupId ]</groupId>
    <version>[ version ]</version>
    </module>
    <module>
    <artifactId>flavour3_module</artifactId>
    <groupId>[ groupId ]</groupId>
    <version>[ version ]</version>
    </module>
    </modules>
    </configuration>
    </execution>
    </executions>
    </plugin>

    走这条路有意义吗?

    更新:

    编写一个操作要执行的模块列表的插件(我上面描述的模块注入(inject)的想法)似乎无法实现,因为模块是由 maven 核心处理的,并且该机制不是为了扩展而设计的一个插件。这可以通过两个插件完成类似工作的事实得到证实,即操纵要执行的项目列表:
  • maven-reactor-plugin
  • maven-invoker-plugin

  • 通过执行系统调用来创建 Maven 子进程来解决问题。对我来说,这不是要走的路,因为它是一个非常不稳定的解决方案。确实 maven-reactor-plugin变成了 incompatible与 Maven3。

    maven-invoker-plugin看起来仍然很有希望。该插件最初旨在运行集成测试,但可以使用它来扩展例如编译阶段。
    但它要求将子 pom.xml-s 视为资源并即时修改。对于我在此处描述的问题,解决方案将过于复杂且不稳定。我更喜欢在构建 maven 模型时可以在内存中运行的更轻量级的东西。

    所以现在我使用配置文件,试图使它们尽可能紧凑。可能在一段时间内,我需要再次考虑这个问题。

    最佳答案

    现在您可以使用 maven-tiles插件以获得所需的行为。

    使用 maven-tiles,您可以在不同的 pom 和 中定义构建行为。进口 无论您喜欢哪里。

    MNG-5102 附有一个工作示例--> daddy3.zip

    Maven 的仅限继承的紧身衣现已正式删除。

    关于maven - 如何从具有所有优点的多模块 Maven 项目继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10245621/

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