在Maven中,配置文件可以覆盖模块(不包括任何模块)

sse*_*ano 11 maven-3 maven

maven,您定义modulespom.xml所有配置文件后,所有配置文件聚合在其中定义的模块:(仅限相关部分)

<project>
    <modules>
        <module>module1</module>
    </modules>
    <profiles>
         <profile>
             <id>pr1</id>
             <modules>
                 <moudule>module2</module>
             </modules>
Run Code Online (Sandbox Code Playgroud)

如果你执行mvn clean它会将命令传递给module1.

如果你发出mvn clean -Ppr1它将传递给module1module2.

我想知道是否maven 3可以pom.xml使用子模块并覆盖它.我的意思是执行一个配置文件,而不是将自己的模块添加到构建强制,如:

<project>
    <!-- omitted -->
    <modules>
        <!-- modules -->
    </modules>
    <build>
        <!-- build -->
    </build>
    <profiles>
        <profile>
             <!-- This profile with no modules -->
        </profile>
    </profiles>
</project>
Run Code Online (Sandbox Code Playgroud)

这个要求可能听起来很愚蠢,但我只是想知道插件配置是否存在类似的机制.

<configuration self.combine="override"
Run Code Online (Sandbox Code Playgroud)

问候!

ssedano

Mic*_*ski 14

这是不可能的.配置文件配置始终与主配置合并,因此您只能在您的案例中添加模块.

但是,您可以做的是创建某种"默认"配置文件(<activeByDefault>true</activeByDefault><activation>部分中),在没有调用其他配置文件时启用该配置文件,并将默认模块列表放在那里.然后,当在Maven构建调用中没有指定配置文件时,使用此"默认"配置文件,但是当您显式调用至少一个配置文件时,它不是,因此您可以这样从头开始定义模块列表.


kaq*_*qao 11

虽然这个问题已经很久了,但谷歌仍然排名很高,所以添加一个新答案是有意义的.

您可以通过缺少属性技巧来激活,以实现您想要的效果.

<profiles>
        <!-- By default, include the modules -->
        <profile>
            <id>full-build</id>
            <activation>
                <!-- Activation by absence of a property. Run normally, without -Dfull-build -->
                <property>
                    <name>!skip-modules</name>
                </property>
            </activation>
            <modules>
                <module>module1</module>
                <module>module2</module>
                <module>module3</module>
            </modules>
        </profile>

        <!-- No-modules build -->
        <profile>
            <id>no-modules</id>
            <activation>
                <!-- Activation by a property. Run with -Dskip-modules to activate -->
                <property>
                    <name>skip-modules</name>
                </property>
            </activation>
            <modules>
            </modules>
        </profile>
    </profiles>
Run Code Online (Sandbox Code Playgroud)