Maven-Projekt hängt von zwei Versionen desselben Artefakts ab

9

Ich habe ein Projekt mit zwei separaten Modulen, die sqlline und eine andere Bibliothek (zB OtherLib) verwenden, die von jline abhängt. Jedoch auf verschiedenen Versionen.

Externe Bibliotheken

Modul1 verwendet Sqlline abhängig von jline 2.10
Module2 verwendet OtherLib abhängig von jline 0.9.94

Und die beiden Versionen sind inkompatibel. Daher habe ich die Klassenpfade so eingestellt, dass Modul1 zuerst im Ordner $ HOME / lib / modul1 und dann im Ordner $ HOME / lib zuerst Modul2 sucht.

Gibt es eine Möglichkeit, maven anzugeben, dass das Artefakt zuerst in ein Quellverzeichnis heruntergeladen werden soll (z. B. ../resources/ib ) und dann während der Paketierungszeit in assembly.xml ?

Ich weiß, dass zum Kopieren aus dem Quellverzeichnis der folgende Code verwendet werden kann.

%Vor%

Auch um Maven zu bekommen, um die Abhängigkeit herunterzuladen, die ich (für Module2) verwenden kann

%Vor%

Wie kann ich sicherstellen, dass jline:jline:jar:2.10 zuerst in den Ordner ../resources / lib heruntergeladen wird?

    
Sach 26.11.2014, 11:12
quelle

2 Antworten

3

Ich habe hier mit maven-dependency-plugin

eine Antwort gefunden

In pom.xml

%Vor%

Und in assembly.xml

%Vor%

jline-0.9.94 ist in einer dependencySet enthalten wie jede andere Abhängigkeit. Ich hoffe das hilft. :)

    
Sach 27.11.2014, 04:41
quelle
8

Wenn Sie absolut sicher sind, was Sie tun, können Sie eine Version mit etwas wie maven-shade-plugin . Aber bitte sei dir absolut sicher, was du tust.

Mit maven-shade-plugin könnten Sie ein neues Maven-Modul erstellen, sagen wir jline:jline_2_10:jar:1.0 und verwenden jline:jline:jar:2.10 als Abhängigkeit. Das maven-shade-plugin würde es dann in Ihrem jline_2_10-1.0.jar verpacken.

Da Ihr neues Artefakt seine eigene groupId:artifactId -Kombination hat, wird es keine Konflikte mit dem anderen jline:jline:jar:0.9.94 Artefakt geben, also haben Sie beide gerne im Klassenpfad.

    
lexicore 26.11.2014 14:15
quelle

Tags und Links