I have the following parent pom.xml
file:
<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>
and in my child pom for mymodule_server
, I have the following:
<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>
How, when I invoke maven: mvn -P build_full
, can I force the child module (mymodule_server
) to use profile subprofile
rather than default
?
In your case, from the top parent/aggregator folder, you could just run:
It will disable any profile having name
default
(and hence disable the profile in the concerned sub-module) and enable any profile having namesubprofile
(and hence enable the profile you wanted).Alternatively, you could configure
subprofile
as such:and then run as following:
It will have the same effect. You can even avoid the
value
element and simply specify-Dsubprofile
, its existence would be enough to activate the profile (in that case a more meaningful name is suggested, like-DactivateSubprofile
). Since you active a different profile, automatically Maven will deactivate the default one.No, you can't activate a child profile from a parent profile. More generally, 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.
First of all, using a profile that is activated by default is generally not a good idea. What you want is to activate a profile based on some condition (OS version, system property...). To solve your problem, you can activate
build_full
profile when a certain system property is present, and make sure thatsubprofile
is also activated when that same property is present.A sample configuration would be the following, where both profiles are activated when the
fullBuild
system property is set totrue
. Invoking Maven withmvn -DfullBuild=true ...
will thus activate both profiles.