IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Maven Java Discussion :

Conflit de jar dans les dependencies


Sujet :

Maven Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut Conflit de jar dans les dependencies
    Bonjour,

    J'ai un projet avec des dependencies, chacune ayant ses dependencies, etc. Malheureusement, l'un des pom demande une version d'un jar, tandis que l'autre en demande une autre, plus récente. Comme je n'ai pas de chance, c'est le premier que maven utilise, et le programme rouspète.

    Comment éviter cela ?

    Plus précisément, j'utilise jackrabbit dans un de mes pom. Jackrabbit demande nekohtml-0.9.4.jar.

    Dans un autre pom, je place le premier comme dependency. De plus, je place htmlunit dans les dependency de scope "test". Mais htmlunit demande nekohtml-1.9.9.jar... et bing !

    Et comme tout ça c'est des pom de poms de poms, sur lesquels je ne peux pas intervenir, je ne vois pas comment je peux résoudre ce problème... Est-ce que vous le savez ?

    Merci.

  2. #2
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Plusieurs idées :

    1. Tu définis une dépendence directe dans ton projet à la version que tu souhaites avoir de nekohtml. Normalement elle devrait être prioritaire par rapport aux dépendances transitives.

    2. Tu joues avec des exclusions. En gros pour ta dépendance ayant la mauvaise version de nekohtml comme dépendance, tu définis dans ton pom :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <dependency>
        <groupId>...</groupId>
        ...
        <exclusions>
            <exclusion>
                <groupId>nekohtml</groupId>
                <artifactId>nekohtml</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  3. #3
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    J'ai essayé le 1, et, en mettant ce dependency avant celui qui appelle le mauvais jar, ça marche, mais de façon un peu limite je trouve : dans le classpath que maven génère, le bon et le mauvais sont présents, mais le premier étant mis avant le second, ça marche. J'aurais mieux compris que maven n'utilise pas du tout le second.

    J'ai aussi essayé le 2, mais là ça ne marche pas du tout, ou alors quelque chose m'a échappé.

  4. #4
    Membre chevronné

    Inscrit en
    Septembre 2006
    Messages
    466
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 466
    Par défaut
    Bonjour,

    Par rapport à la réponse de Romain j'ajouterai :
    • La solution 1 est à n'utiliser que si on peut pas faire autrement. En effet, sinon on rajoute une dépendance directe dans son projet alors que ce n'est pas le cas puisque c'est une dépendance transitive ;
    • Une troisième solution qui ne fonctionne qu'à partir de maven 2.0.9 (il me semble) est d'utiliser le dependencyManagement. C'est la solution que je préfère.
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      <dependencyManagement>
          <dependencies>
       
            <dependency>
      	  <groupId>nekohtml</groupId>
      	  <artifactId>nekohtml</artifactId>
      	  <version>la version que tu souhaites</version>
                <scope>le scope que tu souhaites</scope>
            </dependency>
          </dependencies>
        </dependencyManagement>
      Le comportement attendu est qu'il va surcharger les versions définies pour cette dépendance par tes dépendances directes.


    Rémy

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tester mon programme avec un jar dans les librairies
    Par Ivelios dans le forum NetBeans
    Réponses: 7
    Dernier message: 16/11/2009, 00h21
  2. Organisation des jar dans les applis
    Par -=Spoon=- dans le forum JOnAS
    Réponses: 2
    Dernier message: 06/10/2009, 16h19
  3. Organisation des jar dans les applis
    Par -=Spoon=- dans le forum Général Java
    Réponses: 2
    Dernier message: 24/09/2009, 19h37
  4. Réponses: 7
    Dernier message: 30/07/2009, 22h33
  5. ajouter des .jar dans les fichiers de config
    Par C_C dans le forum NetBeans
    Réponses: 5
    Dernier message: 17/11/2006, 15h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo