gpt4 book ai didi

Maven - 子模块配置文件

转载 作者:行者123 更新时间:2023-12-04 10:15:57 26 4
gpt4 key购买 nike

问题

我有一个 Maven 项目,其结构与以下项目类似:
(为解释目的而简化)

--parent
|-- child A (inherits from parent)
|-- child B (inherits from parent)
|-- child B1 (inherits from B)
|-- child B2 (inherits from B)
|-- child B3 (inherits from B)

只有 children B1 B2 必须使用包含一些额外构建内容的特定配置文件来构建。因此,配置文件已在模块 中指定。乙 .

逻辑上模块属于模块 并另外继承一些依赖项等(聚合+继承)。
(想象一下 B = 前端,B1 = UI,B2 = 主题,B3 = 其他)

问题
  • 是否有可能仍然使用 来自父级的完整构建
    pom
    并仅在正确的情况下激活相应的配置文件
    children ? (将是我最喜欢的解决方案)
  • 或者我是否需要使用高级 react 堆进行单独构建
    选项(-pl 等)?
  • 或者对于这种情况有完全其他的方法吗?


  • 编辑

    编辑,因为问题被标识为 duplicate :
    问题是相应问题中提到的解决方案不起作用。

    如果我使用属性激活子配置文件,它也会被激活 模块 B (父),对于 全部 children 。

    我只希望它对 child 有效 B1 B2 .

    最佳答案

    如果您想要一个应该应用于子模块(并且只有其中一些)的配置文件,在其父项目(pom)中以集中方式定义,但不将配置文件应用于父项目本身,这里是一个建议方法:

    在父pom中定义profile,示例一:

    <profiles>
    <profile>
    <id>sample-profile</id>
    <build>
    <plugins>
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.5</version>
    <executions>
    <execution>
    <id>print-hello</id>
    <phase>${phase.prop}</phase>
    <goals>
    <goal>run</goal>
    </goals>
    <configuration>
    <target>
    <echo message="hello there!" />
    </target>
    </configuration>
    </execution>
    </executions>
    </plugin>
    </plugins>
    </build>
    </profile>
    </profiles>

    注意我们在做什么:
  • 插件 phase元素已参数化,因此插件与构建阶段的绑定(bind)也将参数化
  • 我们现在可以通过属性决定将此插件执行附加到哪个阶段
  • 我们现在可以通过属性决定将此插件执行附加到无阶段(或空阶段)

  • 因此,在同一个父 pom 中,让我们定义属性:

    <properties>
    <phase.prop>none</phase.prop>
    </properties>

    因此,在父 pom 上运行的构建会将插件执行附加到无阶段( none 不是关键字或已知值,只是用于不存在阶段的事实标准,您可以将其留空或将它设置为您喜欢的任何值,它会产生相同的效果)并因此跳过它。默认情况下,它也会在所有声明的模块中被跳过。该配置文件仍将在每个模块中处于事件状态,但不会造成损害,因为它默认不会执行任何插件。

    然后,在您希望插件执行处于事件状态的模块中,您可以仅重新定义相关属性和所需阶段:

    <properties>
    <phase.prop>package</phase.prop>
    </properties>

    然后从主构建(父级)激活配置文件
    mvn clean install -Psample-profile

    父级将其应用于所有模块,但有效的配置文件执行只会发生在 phase.prop 的位置。 value 具有 maven-meaningful 值。

    如果您需要为不同的插件执行设置不同的阶段,那么您可以定义多个属性并应用相同的模式。

    如果您没有插件执行,而是已由 Maven 执行的插件的全局插件配置(作为其打包和默认构建的一部分),您可以重新定义其执行覆盖 default execution id .

    请注意,我们可以使用 skip 来做同样的事情。配置元素,但是:
  • 并非所有插件都提供 skip配置条目
  • 使用 phase元素与任何配置无关,可重复用于附加到同一阶段的执行
  • 关于Maven - 子模块配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35333656/

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