2010-06-22 7 views
6

J'ai une bibliothèque A, qui dépend des bibliothèques B et C. Je déballe les classes de bibliothèques de B et C dans le pot pour la bibliothèque A en utilisant le maven dependency-plugin (voir ci-dessous).Maven: décompresser les dépendances ... et puis les oublier

Maintenant, quand une bibliothèque D utilise la bibliothèque A, bibliothèque D peut accéder à toutes les classes A, B et C. Toutefois, je veux D ne dépendre d'un, mais pas sur les dépendances transitif B et C.

alt text

Je sais que cela peut être réalisé en excluant manuellement B et C pour la CN dépendance mais je voudrais déclarer en quelque sorte en A que B et C ne sont pas portées à la connaissance des modules en utilisant A.

 <plugin> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>unpack-dependencies</id> 
        <phase>generate-resources</phase> 
        <goals> 
         <goal>unpack-dependencies</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

Répondre

6

Je pense que vous pouvez marquer la dépendance avec la portée "fourni" de sorte que le projet dépendant supposera que les pots sont déjà "fournis". Normalement, ils sont fournis par le conteneur, dans votre cas, vous « fourni » les dépendances dans A.

Dans tous les cas modules dépendant de A ignorera les dépendances B et C.

+0

Merci! Cette portée fonctionne parfaitement dans mon cas! – mxro

4

Première option, utilisez dependency:unpack au lieu de dependency:unpack-dependencies et donc de lister B et C dans la configuration du plugin au lieu de les déclarer en tant que dépendances (elles seront donc inconnues de D).

Deuxième option, déclarer B et C comme des dépendances de A ayant une portée provided comme suggéré par Peter (voir Transitive Dependencies‎) et vous ne « voir » dans D.

+0

Merci! Dependency Unpack ressemble à une bonne option. Merci pour le lien vers la documentation de Maven! Je pense que la description de «fourni» est un peu trompeuse. Mais cette portée fait précisément le travail dans le cas montré ci-dessus. – mxro

0

Je l'ai fait quelque chose de similaire cette semaine en utilisant le maven-shade-plugin pour créer un pot uber. Toutefois, lorsque j'ai ajouté le fichier uber en tant que dépendance à un autre projet, les jars sous-jacents ont été ajoutés de manière transitoire.
Pour résoudre ce problème, je dû marquer les dépendances du uber-pot comme <option> vrai </option > dans son pom, et réinstaller le uber-pot.
Voir http://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html

Questions connexes