从父配置文件激活子配置文件
Activating a Child Profile from a Parent Profile
我有以下父 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>
在我的 mymodule_server
子 pom 中,我有以下内容:
<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
?
在你的例子中,从顶部 parent/aggregator 文件夹,你可以 运行:
mvn clean install -Pbuild_full,!default,subprofile
它将禁用任何名称为 default
的配置文件(并因此禁用相关子模块中的配置文件)并启用任何名称为 subprofile
的配置文件(因此启用您想要的配置文件) .
或者,您可以这样配置 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 将自动停用默认配置文件。
不,您不能从父资料激活子资料。更一般地说,you can't activate or deactivate any profile from any other profile (there is a JIRA feature-request MNG-3309). What you can do is activate two profiles based on the same property.
首先,使用默认激活的配置文件通常不是一个好主意。您想要的是根据某些条件(OS 版本,系统 属性...)激活配置文件。要解决您的问题,您可以在存在某个系统 属性 时激活 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>
我有以下父 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>
在我的 mymodule_server
子 pom 中,我有以下内容:
<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
?
在你的例子中,从顶部 parent/aggregator 文件夹,你可以 运行:
mvn clean install -Pbuild_full,!default,subprofile
它将禁用任何名称为 default
的配置文件(并因此禁用相关子模块中的配置文件)并启用任何名称为 subprofile
的配置文件(因此启用您想要的配置文件) .
或者,您可以这样配置 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 将自动停用默认配置文件。
不,您不能从父资料激活子资料。更一般地说,you can't activate or deactivate any profile from any other profile (there is a JIRA feature-request MNG-3309). What you can do is activate two profiles based on the same property.
首先,使用默认激活的配置文件通常不是一个好主意。您想要的是根据某些条件(OS 版本,系统 属性...)激活配置文件。要解决您的问题,您可以在存在某个系统 属性 时激活 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>