bhinks
bhinks

Reputation: 1409

Maven profile activation with multiple conditions

I'm working on getting the rpm-maven plugin setup in a project. In our staging and production environments, the build occurs on Red Hat boxes, but we have several Windows boxes that are used for development and testing so I wanted the RPM build process to be part of a profile that is only active on a box that has rpmbuild installed.

This was my first attempt at an activation condition:

<activation>
  <os>
    <family>unix</family>
  </os> 
  <file>
    <exists>/usr/bin/rpmbuild</exists>
  </file>
</activation>

My initial testing only involved building on a Windows box and building on a CentOS box, and both gave me the results I expected. Later, the build broke on a Linux machine that didn't have rpmbuild available. It looks like having two conditions like this isn't supported. Is this the case? I realize I can probably just get rid of the <os/> element and get the results I want, but for future reference is there a better way to create profiles with multiple activation conditions?

Upvotes: 50

Views: 33052

Answers (4)

Ondra Žižka
Ondra Žižka

Reputation: 46806

I think this is what these Maven extensions do:

However, since it's an extension (not a plugin), every project using it will have to register the extension. And there's a risk that the project author will abandon it and it won't work in future maven versions.

Upvotes: 0

Mysterion
Mysterion

Reputation: 9320

Just fixed by me :)

Starting from 3.2.2 it will work as expected: multiple conditions will be ANDed

Reference - https://github.com/apache/maven/commits/master, search by MNG-4565

Commit URL - https://github.com/apache/maven/commit/c6529932f9e3efdfc86ed73f59a307a8f8b6ea5f

Upvotes: 14

Gab
Gab

Reputation: 8323

And worst you can mix condition of different type for example file, jdk and property as described here http://www.sonatype.com/books/mvnref-book/reference/profiles-sect-activation.html, but you can't even put two condition of same type, for example two properties

<activation>
    <property>
           <name>integrationTest</name>
    </property>
    <property>
        <name>packaging</name>
        <value>swf</value>
    </property>
 </activation>

This won't work as only one <property> tag will be allowed. Associated JIRA : https://issues.apache.org/jira/browse/MNG-3328

And the bug described above is still open... 5 years it's just a shame !

Upvotes: 19

Nishant
Nishant

Reputation: 55866

Maven <activation> block is a list of OR -- the profile will be activated as soon as the first criteria is met. So, it is less likely that your problem has a solution at least until this bug-report gets fixed https://issues.apache.org/jira/browse/MNG-4565


Update:

it's fixed in 3.2.2 now – sfussenegger (via comment)

Upvotes: 49

Related Questions