2012-03-23 6 views
1

J'ai une version Maven pour un projet OSGI sur lequel je travaille. J'aimerais utiliser certaines fonctionnalités de la bibliothèque google-osgi de Google, version 11.0.1.Gestion de plusieurs versions de dépendances avec OSGI/Maven

L'un des projets dont je dépend dépend de guava-osgi, version 10.0.0. Je sais qu'il est possible d'avoir plusieurs versions pour une dépendance particulière, mais j'ai un peu de difficulté avec ça.

La spécification de la dépendance sur 11.0.1 dans pom de mon projet se compile très bien, mais lorsque j'exécute mes tests unitaires, Java tire la version 10.0.0, ce qui entraîne une erreur d'exécution. Plus précisément, l'une des classes de 11.0.1 a le même nom qu'une interface dans 10.0.0, donc Java barfs lorsque j'essaie de l'instancier.

Existe-t-il un moyen de le faire avec élégance?

Répondre

4
  1. Vérifier l'arbre des dépendances avec maven-dependency-plugin: mvn dependency:tree
  2. Trouver toutes les dépendances qui sont actives dans le champ d'essai avec la version guava-osgi:10.0.0
  3. Ne comptez pas guava-osgi:10.0.0 de champ d'essai
... 
<dependency> 
    <groupId>dep1-groupid</groupId> 
    <artifactId>dep1-artifactid</artifactId> 
    <version>dep1-version</version> 
    <scope>test</scope> 
    <exclusions> 
     <exclusion> 
      <groupId>com.googlecode.guava-osgi</groupId> 
      <artifactId>guava-osgi</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 
... 
+0

Est-ce que cela s'ajoute à la dépendance que j'ai déjà configurée sur dep1? J'ai besoin de dep1 au-delà de la portée du test. – spitzanator

+0

il est préférable d'exclure la version 10.0.0 de toutes les dépendances. Vérifiez la dépendance mvn: arbre pour plus de détails. –

+0

Ma question est pourquoi vous fournissez " test" Aussi, je ne suis pas sûr si 10.0.0 est compatible avec 11.0.1. Je voudrais qu'ils courent côte à côte, avec mon projet en utilisant 11.0.1 et ma dépendance en utilisant 10.0.0. – spitzanator

0

Vous pouvez essayer d'exclure la version 10.0.0 du « projet je dépends »

... 
<dependency> 
    <groupId>project i depend on</groupId> 
    <artifactId>project</artifactId> 
    <version>2.0.0</version> 
    <exclusions> 
     <exclusion> 
      <groupId>com.googlecode.guava-osgi</groupId> 
      <artifactId>guava-osgi</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 
... 
+0

Malheureusement, pas de dés. – spitzanator

+0

dang. Peut-être qu'une autre dépendance utilise également la version 10.0.0? –

0

Puisque vous travaillez sur un environnement basé sur OSGi, vous pouvez facilement spécifier la version de goyave nécessaire en utilisant le plugin bundle. Mais, il est important de comprendre que lors de la compilation, et au moment du test unitaire (c'est-à-dire dans Maven), il ne sait pas/se soucie de l'environnement OSGi que vous avez créé. Donc, vous devez utiliser un truc comme mentionné dans d'autres réponses. Je n'ai pas testé ceux-là.

Questions connexes