Maven - activate profile based on project property

2019-04-23 03:02发布

Hi I am trying to achieve something like this:

In a parent pom, I have

<profile>
  <activation>
    <property>
      <name>Compile</name>
      <value>${project.artifactId}</value>
    ...

so that if I run mvn -DCompile=mod1 install under the parent pom, it will only apply the profile settings to module 1, but not the others.

Similarly, if I have

<profile>
  <activation>
    <property>
      <name>Compile</name>
      <value>${project.packaging}</value>
    ...

then running mvn -DCompile=war install under the parent pom, it will only apply the profile settings to those to be packed as war but not jar nor pom.

I tried but it didnt work as expected. Did I miss anything? Please help.

P.S. no need to suggest workarounds as I am only interested on this method. Simply answer it is not possible with reason if thats the case. Thank you

3条回答
你好瞎i
2楼-- · 2019-04-23 03:28

It won't work since...

To begin with:

And why it would not work from the parent down to the children:

  • The properties in the parent POM are expanded before your child POM even comes in the picture.

Many have gone here before you and failed.

One might wonder what you are really trying to do. Are you building different artifacts from the same source project? Perhaps you need a few more Maven modules to take care of things.

查看更多
霸刀☆藐视天下
3楼-- · 2019-04-23 03:45

As of Maven 3.0, profiles in the POM can also be activated based on properties from active profiles from the settings.xml.

You can check the sample given here :

http://maven.apache.org/guides/introduction/introduction-to-profiles.html

查看更多
乱世女痞
4楼-- · 2019-04-23 03:46

Yes you can activate the profile depending one or variety of parameters like env variables.

<project>
    ...
    <profiles>
        <profile>
            <id>development</id>
            <activation>
                <property>
                    <name>!environment.type</name>
                </property>
            </activation>
        </profile>
    </profiles>
</project>

If you are trying to have different packaging depending on X than you can use the assembly plugin and do your magic there http://maven.apache.org/plugins/maven-assembly-plugin/

More on the activation property

查看更多
登录 后发表回答