Question

Nous avons une construction multi-modules avec des modules utilisant différentes technologies, telles que Java et Flex. Est-il possible d'activer différents profils en fonction du module actuellement compilé?

Je l'ai essayé avec une activation telle que

<profile>
  <id>flex</id>
  <activation>
    <file>
      <exists>${basedir}/src/main/flex</exists>
    </file>
  </activation>
  ...
</profile

Mais cela n'a pas fonctionné, bien que l'utilisation de $ {basedir} soit documentée dans la Documentation Maven (il s'agit d'un bogue dans Maven). Existe-t-il une possibilité différente d’avoir des activations différentes en fonction du module actuel? Ou bien Maven ne permet-il d'activer qu'un profil pour tous les modules ou pas du tout?

Était-ce utile?

La solution

Pour ceux qui, comme moi, lisent cette question à la recherche de réponses, ce cas d'utilisation fonctionne désormais dans Maven 3.

Un problème affectait cette fonctionnalité dans les premières versions de 3 (voir http: // jira .codehaus.org / browse / MNG-2363 ), mais cela fonctionne correctement pour moi avec Maven 3.0.4.

Autres conseils

Après quelques recherches supplémentaires, je suis finalement parvenu à la conclusion que cela n’était pas possible pour deux raisons dans la version actuelle de Maven (2.1.0):

  • Les profils Maven n'étant pas hérités, vous ne pouvez pas définir de profil dans un POM parent et l'activer dans un POM enfant.
  • Je n'ai pas trouvé la possibilité d'activer un profil à partir d'un POM lui-même. L'activation ne fonctionne pas avec $ {basedir} et la réponse d'activation de propriété ne concerne que les paramètres système, spécifiés globalement via l'option -D.

Dans la version 2.2.1, les profils sont hérités mais le problème $ {basedir} existe toujours. Je suis dans le même bateau - je dois activer un profil basé sur l'existence d'un fichier dans un projet donné. Les versions de mon enfant s'exécutent correctement (profil hérité activé par l'existence du fichier local), mais si j'exécute la construction à partir du parent supérieur, elles échouent car le fichier n'est pas trouvé.

En ce qui concerne l'activation basée sur les fichiers, vous pouvez essayer de supprimer $ {basedir}. Nous l'utilisons comme ceci:

<activation>
   <file>
      <missing>target/jboss/conf/jboss-service.xml</missing>
   </file>
</activation>

Je ne sais pas si cela aide, mais j'ai résolu un problème similaire avec l'approche suivante:

  1. J'ai créé et décrit le profil dans le POM parent, qui a activeByDefault = false . La section PluginManagement contient ensuite les configurations de différents plugins.
  2. Les enfants peuvent réutiliser ce profil et définir activeByDefault = true . Cela rend le profil actif, mais aucun plugin n’est encore activé.
  3. Mais heureusement, les configurations de plug-in décrites sont disponibles. Vous pouvez les réutiliser chez les enfants en les définissant dans la section Plugins. Il vous suffit de fournir le groupe et l'artefactID, et de définir inherited = true pour chaque plug-in que vous souhaitez réutiliser dans les enfants.

J'espère que ça aide. Désolé de ne pas inclure d’extraits de code, mais j’espère que la version est compréhensible.

Vous pouvez définir une propriété dans chaque module pour lequel vous souhaitez utiliser le profil, puis utiliser " propriété " activation dans vos profils.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top