Maven - Child 模块配置文件

Maven - Child Module Profiles

问题

我有一个 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 B1B2 必须使用包含一些额外构建内容的特定配置文件构建.因此,配置文件已在模块 B 中指定。

逻辑上模块属于模块B并且还继承了一些依赖关系等(聚合+继承)。
(假设 B = 前端,B1 = UI,B2 = 主题,B3 = 其他)


问题


编辑

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

如果我使用 属性 激活子配置文件,它也会为 模块 B(parent)和ALLchildren.

我只希望它在 child B1B2.

期间有效

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

在父 pom 中定义配置文件,示例一:

<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 元素已参数化,因此插件到构建阶段的绑定也将被参数化
  • 我们现在可以通过 属性 决定将此插件执行附加到哪个阶段
  • 我们现在可以通过 属性 决定将此插件执行附加到无阶段(或空阶段)

所以,在同一个父 pom 中,让我们定义 属性:

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

因此,父 pom 上的构建 运行 将插件执行附加到任何阶段(none 不是关键字或已知值,只是用于一个不存在的阶段,你可以把它留空或给它任何你喜欢的值,它会产生同样的效果)然后跳过它。在所有声明的模块中,它也将默认被跳过。该配置文件在每个模块中仍将处于活动状态,但不会造成任何危害,因为它默认不会执行任何插件。

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

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

然后从主版本(父版本)激活配置文件时

mvn clean install -Psample-profile

父级会将其应用于所有模块,但有效的配置文件执行只会发生在 phase.prop 值具有 Maven 意义的值的情况下。

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

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

请注意,我们可以使用 skip 配置元素完成相同的操作,但是:

  • 并非所有插件都提供 skip 配置条目
  • 使用 phase 元素与任何配置无关,可以重复用于附加到同一阶段的执行