从父配置文件激活子配置文件

时间:2016-02-10 00:23:13

标签: maven maven-3 maven-profiles

我有以下父pom.xml个文件:

<profile>
    <id>build_full</id>
    <activation>
        <activeByDefault>true</activeByDefault>
    </activation>
    <modules>
        <module>mymodule_interface</module>
        <module>mymodule_switch</module>
        <module>mymodule_switch_simulator</module>
        <module>mymodule_switch_controller</module>
        <module>mymodule_server</module>
    </modules>
</profile>

在我的孩子pom mymodule_server中,我有以下内容:

<profile>
    <id>subprofile</id>
    <modules>
        <module>...various modules...</module>
    </modules>
</profile>  
<profile>
    <id>default</id>
    <activation>
        <activeByDefault>true</activeByDefault>
    </activation>
    <modules>
        <module>...various modules...</module>
    </modules>
</profile>  

当我调用maven:mvn -P build_full时,我是否可以强制子模块(mymodule_server)使用个人资料subprofile而不是default

2 个答案:

答案 0 :(得分:7)

不,您无法从父配置文件激活子配置文件。更一般地说,you can't activate or deactivate any profile from any other profile(有一个JIRA功能请求MNG-3309)。你能做的是activate two profiles based on the same property

首先,使用默认激活的配置文件通常不是一个好主意。您想要的是根据某些条件(操作系统版本,系统属性...)激活配置文件。要解决您的问题,您可以在存在特定系统属性时激活build_full配置文件,并确保在存在相同属性时也激活subprofile

示例配置如下,当fullBuild系统属性设置为true时,两个配置文件都会被激活。因此,使用mvn -DfullBuild=true ...调用Maven将激活两个配置文件。

<profile>
    <id>build_full</id>
    <activation>
        <property>
            <name>fullBuild</name>
            <value>true</value>
        </property>
    </activation>
    <modules>
        <module>mymodule_interface</module>
        <module>mymodule_switch</module>
        <module>mymodule_switch_simulator</module>
        <module>mymodule_switch_controller</module>
        <module>mymodule_server</module>
    </modules>
</profile>
<profile>
    <id>subprofile</id>
    <activation>
        <property>
            <name>fullBuild</name>
            <value>true</value>
        </property>
    </activation>
    <modules>
        <module>...various modules...</module>
    </modules>
</profile>

答案 1 :(得分:2)

在您的情况下,从顶级父/聚合器文件夹,您可以运行:

mvn clean install -Pbuild_full,!default,subprofile

它将禁用名称为default的任何配置文件(因此禁用相关子模块中的配置文件)并启用名称为subprofile的任何配置文件(从而启用您想要的配置文件)。< / p>

或者,您可以配置subprofile

<profiles>
    <profile>
        <id>subprofile</id>
        <activation>
            <property>
                <name>subprofile</name>
                <value>true</value>
            </property>
        </activation>
        ....

然后运行如下:

mvn clean install -Dsubprofile=true -Pbuild_full

它会产生同样的效果。您甚至可以避免使用value元素,只需指定-Dsubprofile,它的存在就足以激活配置文件(在这种情况下,建议使用更有意义的名称,如-DactivateSubprofile)。由于您激活了不同的配置文件,因此Maven将自动停用默认配置文件。