2008-10-03 8 views
86

Est-il possible d'avoir un ensemble différent de dépendances dans un fichier maven pom.xml pour différents profils?Différentes dépendances pour différents profils de construction dans maven

par exemple.

mvn -P debug 
mvn -P release 

Je voudrais prendre un autre fichier jar de dépendance dans un profil qui a les mêmes noms de classe et différentes implémentations des mêmes interfaces.

+0

Ceci peut être utilisé pour cibler différents serveurs Web. Par exemple, lors de la création d'un serveur JavaEE 5, qui propose des bibliothèques telles que JAXB, que vous ne devez pas inclure dans votre fichier war, par rapport à la construction d'un serveur JavaEE 1.4, où vous devez inclure le fichier JAXB jar. – Leonel

Répondre

135

Pour citer le maven documentation on this:

Un élément profilé contient à la fois une activation facultative (un déclencheur de profil) et l'ensemble de modifications à apporter à la POM si ce profil a été activé. Par exemple, un projet construit pour un environnement de test peut pointer vers une base de données différente de celle du déploiement final. Des dépendances peuvent être extraites de différents référentiels en fonction de la version JDK utilisée.

(L'accent est à moi)

Il suffit de mettre la dépendance pour le profil release dans la déclaration de profil lui-même et faire la même chose pour debug.

 
<profiles> 
    <profile> 
     <id>debug</id> 
     … 
     <dependencies> 
      <dependency>…</dependency> 
     </dependencies> 
     … 
    </profile> 
    <profile> 
     <id>release</id> 
     … 
     <dependencies> 
      <dependency>…</dependency> 
     </dependencies> 
     … 
    </profile> 
</profiles> 
+0

Cette méthode provoquera le code non résolu en mode édition. Si le débogage est actif, le jar de dépendance de release sera manquant, et le code sera erreur. Comment le résoudre? – brucenan

+0

Vous pouvez définir la portée de la dépendance spécifique à la publication comme 'fournie' dans la hiérarchie des dépendances et réinitialiser la portée à 'compiler' dans la section du profil de version. Alors que la dépendance est disponible pour la compilation mais pas dans la guerre finale pour le profil 'debug'. – uday

+0

@uday Si vous mettiez une réponse montrant cette approche, j'aimerais la mettre de nouveau – javadba

3

Votre groupId, artifactId devrait être segmenté dans vos profils en tant que propriétés et vous pouvez déplacer vos dépendances à la section générique.

+1

Cela ne serait le cas que si vous avez 1 dépendance. Si le nombre de dépendances diffère entre le débogage et la libération, la simple tokenisation ne fonctionnera pas. Pour cette question, je recommande de ne pas tokenize et explicitement définir les deps dans la section de profil. –

+0

L'autre réponse ne fonctionnait pas pour moi, car les dépendances de profil par défaut étaient toujours incluses avec d'autres dépendances de profil spécifiques. Votre réponse a bien fonctionné. –

Questions connexes