2012-03-23 6 views
1

Ich habe einen Maven-Build für ein OSGI-Projekt, an dem ich gerade arbeite. Ich möchte einige Funktionen aus Googlas Bibliothek von Google verwenden, Version 11.0.1.Mehrere Abhängigkeitsversionen mit OSGI/Maven verwalten

Eines der Projekte, auf die ich mich verlassen kann, ist abhängig von guava-osgi, Version 10.0.0. Ich weiß, dass mehrere Versionen für eine bestimmte Abhängigkeit machbar sind, aber ich habe ein paar Probleme damit.

Die Angabe der Abhängigkeit von 11.0.1 in meinem Projekt pom kompiliert gut, aber wenn ich meine Komponententests ausführen, zieht Java die Version 10.0.0 ein, was zu einem Laufzeitfehler führt. Insbesondere hat eine der Klassen in 11.0.1 den gleichen Namen wie eine Schnittstelle in 10.0.0, so dass Java stört, wenn ich versuche, sie zu instanziieren.

Gibt es eine Möglichkeit, dies elegant zu tun?

Antwort

4
  1. überprüfen Abhängigkeitsbaum mit maven-dependency-plugin: mvn dependency:tree
  2. alle Abhängigkeiten finden, die im Prüfumfang aktiv sind mit guava-osgi:10.0.0 Version
  3. ausschließen guava-osgi:10.0.0 von Prüfumfang
... 
<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

Ist das zusätzlich zu der Abhängigkeit, die ich bereits dep1 eingerichtet habe? Ich brauche dep1 über den Testbereich hinaus. – spitzanator

+0

ist es besser, die Version 10.0.0 von allen Abhängigkeiten auszuschließen. Check Mvn Abhängigkeit: Baum für weitere Details. –

+0

Meine Frage ist, warum Sie liefern " Test" Ich bin mir auch nicht sicher, ob 10.0.0 mit 11.0.1 kompatibel ist. Ich möchte, dass sie Seite an Seite laufen, wobei mein Projekt 11.0.1 und meine Abhängigkeit 10.0.0 verwendet. – spitzanator

0

Sie könnten versuchen, die 10.0.0-Version aus dem ‚project i hängen von‘ auszuschließen

... 
<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

Leider keine Würfel. – spitzanator

+0

dang. Vielleicht verwendet eine andere Abhängigkeit auch die Version 10.0.0? –

0

Da Sie an einer OSGi-basierten Umgebung arbeiten, können Sie mit dem Bundle-Plugin ganz einfach die benötigte Guava-Version angeben. Aber es ist wichtig zu verstehen, dass es zur Kompilierungszeit und zur Zeit des Komponententests (dh innerhalb von Maven) nicht weiß/sich um die OSGi-Umgebung kümmert, die Sie erstellt haben. Also, Sie müssen einen Trick verwenden, wie in anderen Antworten erwähnt. Ich habe diese allerdings nicht getestet.