Différentes dépendances pour différents profils de build

115

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

par exemple

mvn -P debug
mvn -P release

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

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

Réponses:

174

Pour citer la documentation Maven à ce sujet :

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

(Je souligne)

Mettez simplement la dépendance du releaseprofil dans la déclaration de profil elle-même et faites de même pour debug.

<profils>
    <profil>
        <id> débogage </id>
        …
        <dépendances>
            <dependency>… </dependency>
        </dependencies>
        …
    </profile>
    <profil>
        <id> version </id>
        …
        <dépendances>
            <dependency>… </dependency>
        </dependencies>
        …
    </profile>
</profiles>
Aleksandar Dimitrov
la source
2
Cette méthode entraînera la non-résolution du code en mode édition. Si le débogage est actif, le jar de dépendance de la version sera manquant et le code sera une erreur. Comment le résoudre?
brucenan
6
vous pouvez définir la portée de la dépendance spécifique à la version comme «fournie» dans la hiérarchie des dépendances et réinitialiser la portée sur «compiler» dans la section du profil de version. Pour que la dépendance soit disponible pour la compilation mais pas dans la guerre finale pour le profil de «débogage».
uday
@uday Si vous pouviez mettre une réponse montrant cette approche, j'aimerais voter pour
javadba
Les profils IMHO sont inutiles, du moins pour les dépendances: les IDE donnent des erreurs, les dépendances cessent de se résoudre, les applications ne fonctionnent pas à la fin. J'attendais plus.
Ares le
6

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


la source
2
Ce 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 version, la création de jetons ne fonctionnera pas. Pour cette question, je recommanderais de ne pas tokeniser et de définir explicitement les deps dans la section de profil.
Marcel Overdijk
L'autre réponse n'a pas fonctionné 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 très bien fonctionné.
Vlad Mihalcea
@Vlad Avez-vous supprimé la dépendance du corps principal du POM? Sinon, vous l'aurez deux fois. (Voir stackoverflow.com/q/24855678/6944068 pour savoir comment s'assurer qu'un profil est toujours actif.)
toolforger