gpt4 book ai didi

maven - 可以将多模块 Maven 原型(prototype)设置为具有可选模块吗?

转载 作者:行者123 更新时间:2023-12-03 22:35:33 26 4
gpt4 key购买 nike

我将创建一个多模块原型(prototype)。它将生成几个模块。原型(prototype)的一些用户可能需要所有这些,而一些用户只需要其中一些。

我的原型(prototype)可以从命令行获取参数并决定生成哪些模块吗?我查了https://maven.apache.org/archetype/archetype-models/archetype-descriptor/archetype-descriptor.html它似乎不支持这一点。

最佳答案

在这种特定情况下,原型(prototype)总是可以创建所有需要的模块并将不同的风格(模块集)移动到配置文件中。在 archetype:generate 中指定的默认情况下,只有一个配置文件处于事件状态。步。

因此,如果我想拥有一组 flavorA 的模块,我将运行原型(prototype)为

mvn archetype:generate -DarchetypeGroupId=.. -DflavorA=true

并且原型(prototype)会将此变量传递给 activeByDefault重新定义 modules 的 flavorA 配置文件的元素flavorA 用户所需的一组模块的元素。

对flavorB 和flavorB 也可以这样做(例如),它们各自定义了一组不同的模块。

作为原型(prototype)一部分的这种聚合器/父 POM 的示例是:
<profiles>
<profile>
<id>flavourA</id>
<activation>
<activeByDefault>${flavourA}</activeByDefault>
</activation>
<modules>
<module>profiled-module2</module>
<module>profiled-module3</module>
</modules>
</profile>
<profile>
<id>flavourB</id>
<activation>
<activeByDefault>${flavourB}</activeByDefault>
</activation>
<modules>
<module>profiled-module3</module>
</modules>
</profile>
<profile>
<id>flavourC</id>
<activation>
<activeByDefault>${flavourC}</activeByDefault>
</activation>
<modules>
<module>profiles-module1</module>
<module>profiled-module2</module>
<module>profiled-module3</module>
</modules>
</profile>
</profiles>
archetype-metadata.xml然后文件可以指定:
<requiredProperties>
<requiredProperty key="flavourA">
<defaultValue>false</defaultValue>
</requiredProperty>
<requiredProperty key="flavourB">
<defaultValue>false</defaultValue>
</requiredProperty>
<requiredProperty key="flavourC">
<defaultValue>false</defaultValue>
</requiredProperty>
</requiredProperties>

使用 -DflavorB=true 调用的原型(prototype)然后选项将生成一个 pom,如下所示:
<profiles>
<profile>
<id>flavourA</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<modules>
<module>profiled-module2</module>
<module>profiled-module3</module>
</modules>
</profile>
<profile>
<id>flavourB</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<modules>
<module>profiled-module3</module>
</modules>
</profile>
<profile>
<id>flavourC</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<modules>
<module>profiles-module1</module>
<module>profiled-module2</module>
<module>profiled-module3</module>
</modules>
</profile>
</profiles>

这种方法具有以下优点和缺点:

优势
  • 您将通用模块和原型(prototype)维护集中在一个地方,同时将 flavor 选择留给原型(prototype)
  • 的用户
  • 如果需要并且零成本,原型(prototype)的用户可以从一种风格切换到另一种风格,只需激活/停用配置文件
  • 该方法使用标准 Maven 功能

  • 缺点
  • 每个原型(prototype)都会生成一整套模块,即使并非所有模块都是必需的
  • 如果真的是“噪音”,用户可以手动删除不需要的模块,但这仍然是手动操作


  • 此外,除了上述方法之外,我们还可以在每个配置文件中配置 Maven Clean Plugin 以删除与其风格无关的模块,以便在其第一次构建( maven clean )时,将删除任何不需要的模块.这种方法虽然会使 POM 的配置文件不一致,但也可以考虑(不推荐)。

    就像是:
    <profile>
    <id>flavourA</id>
    <activation>
    <activeByDefault>${flavorA}</activeByDefault>
    </activation>
    <modules>
    <module>profiled-module2</module>
    <module>profiled-module3</module>
    </modules>

    <build>
    <plugins>
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-clean-plugin</artifactId>
    <version>3.0.0</version>
    <configuration>
    <filesets>
    <fileset>
    <directory>${basedir}/profiled-module1</directory>
    </fileset>
    </filesets>
    </configuration>
    </plugin>
    </plugins>
    </build>
    </profile>

    关于maven - 可以将多模块 Maven 原型(prototype)设置为具有可选模块吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34735040/

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