web-dev-qa-db-fra.com

Activation du profil Maven avec plusieurs conditions

Je travaille à obtenir la configuration du plugin rpm-maven dans un projet. Dans nos environnements de production et de préparation, la construction se produit sur des boîtes Red Hat, mais nous avons plusieurs boîtes Windows qui sont utilisées pour le développement et les tests, donc je voulais que le processus de construction RPM fasse partie d'un profil qui n'est actif que sur une boîte qui a rpmbuild installé.

C'était ma première tentative de condition d'activation:

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

Mes tests initiaux ont uniquement consisté à construire sur une boîte Windows et à construire sur une boîte CentOS, et les deux m'ont donné les résultats que j'attendais. Plus tard, la construction a éclaté sur une machine Linux qui n'avait pas de rpmbuild disponible. Il semble que deux conditions comme celle-ci ne soient pas prises en charge. Est-ce le cas? Je me rends compte que je peux probablement me débarrasser du <os/> élément et obtenir les résultats souhaités, mais pour référence future, existe-t-il une meilleure façon de créer des profils avec plusieurs conditions d'activation?

40
bhinks

Maven <activation> block est une liste de OR - le profil sera activé dès que les premiers critères seront remplis. Ainsi, il est moins probable que votre problème ait une solution au moins jusqu'à ce que ce rapport de bogue soit corrigé https://issues.Apache.org/jira/browse/MNG-4565


Mettre à jour:

il est maintenant corrigé dans 3.2.2 - sfussenegger (via un commentaire)

42
Nishant

Et pire encore, vous pouvez mélanger des conditions de type différent, par exemple un fichier, un jdk et une propriété, comme décrit ici http://www.sonatype.com/books/mvnref-book/reference/ profiles-sect-activation.html, mais vous ne pouvez même pas mettre deux conditions du même type, par exemple deux propriétés

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

Cela ne fonctionnera pas comme un seul <property> tag sera autorisé. JIRA associé: https://issues.Apache.org/jira/browse/MNG-3328

Et le bug décrit ci-dessus est toujours ouvert ... 5 ans c'est juste dommage!

15
Gab

Juste réparé par moi :)

À partir de 3.2.2 cela fonctionnera comme prévu: plusieurs conditions seront ET

Référence - https://github.com/Apache/maven/commits/master , recherchez par MNG-4565

URL de validation - https://github.com/Apache/maven/commit/c6529932f9e3efdfc86ed73f59a307a8f8b6ea5f

12
Mysterion

Je pense que c'est ce que font ces extensions Maven:

Cependant , puisque c'est une extension (pas un plugin), chaque projet l'utilisant devra enregistrer l'extension. Et il y a un risque que l'auteur du projet l'abandonne et cela ne fonctionnera pas dans les futures versions de maven.

0
Ondra Žižka