2017-01-16 4 views
1

Meine Klassenpfad enthält zwei verschiedene Versionen einer indirekten Abhängigkeit und ich verstehe nicht warum.Ivy indirekte Abhängigkeit zweimal aufgeführt

Mein Unterprojekt ("myJar") hängt von einem "utils" -Unterprojekt ab, das von "lib-subprojA" abhängt. Ich habe den Code für all diese Projekte, aber sie sind proprietär, daher kann ich keine Snippets posten.

myProject-myJar -> myProject-utils -> lib-subprojA 

Ich habe eine Änderung in lib-subprojA; die letzte Version vor der Änderung war 0.0.100-SNAPSHOT. Die Version, die meine Änderung enthält, ist 0.0.101-SNAPSHOT. Wenn ich auf den Klassenpfad von "myProject-myJar" schaue, finde ich sowohl "lib-subprojA-0.0.100-SNAPSHOT.jar" (die alte Version) als auch "lib-subprojA-0.0.101-SNAPSHOT.jar" (die letzte Version). Nicht sicher, warum beide in Classpath sind, aber ich kann "myProject-myJar" nicht kompilieren, da es die alte Version von "lib-subprojA" verwendet.

Dies geschieht in Eclipse (mit IvyDE) und sbt (sbt clean update compile). Ich habe keine Ahnung, warum die Auflösung des mittleren Projekts ("myProject-utils") die korrekte Abhängigkeit erzeugt, während das Blattprojekt ("myProject-myJar") zwei Versionen derselben JAR ("lib-subprojA", Versionen 0.0) enthält .100, 0.0.101).

Liegt das daran, dass Ergebnisse mit mittlerer Auflösung zwischengespeichert werden? Wenn ja, wie kann ich diesen Cache löschen?

lib-subprojA // Made change here. Old version: 0.0.100; new: 0.0.101 
lib-subprojB 
myProject-utils: dependency ... name="lib-subprojA" rev="0.0.+" conf="compile->compile(*),master(*);runtime->runtime(*)" 
    resolves to: lib-subprojA-0.0.101-SNAPSHOT.jar 
myProject-myJar: dependency ... name="myProject-utils" rev="0.0.+" conf="compile->compile(*),master(*);runtime->runtime(*)" 
    resolves to: lib-subprojA-0.0.100-SNAPSHOT.jar, lib-subprojA-0.0.101-SNAPSHOT.jar 
+0

Um Ihren Cache zu löschen, können Sie 'rm -rf ~/.ivy2/cache'. Es gibt auch einen 'local'-Ordner in' ~/.ivy2', den Sie ebenfalls entfernen können (er speichert die Bibliotheken, die mit 'sbst publishLocal' veröffentlicht wurden). Es gibt auch ein nettes Werkzeug [hier] (https://github.com/jrudolph/sbt-dependency-graph), um das Abhängigkeitsdiagramm Ihres Projekts anzuzeigen, das helfen kann, es einzugrenzen. – Eric

+0

Gelöschte Caches von '~/.ivy2'. Problem bleibt. Ich habe sogar zahlreiche Builds von 'lib-subprojA' (ohne Codeänderungen) gemacht, in der Hoffnung, dass Version 0.0.100 getilgt wird. Ich habe jetzt Abhängigkeiten von den Versionen 0.0.100 (alt, nicht gut) und 0.0.112 (spätestens) – radumanolescu

Antwort

0

Es stellt sich heraus, dass in einer der Konfigurationsdateien für lib-subprojA wir local.ivy.dir-${user.home}/ivy2 statt ${user.home}/.ivy2 gesetzt hatte. Ich habe ein paar Stunden damit verbracht, ein einzelnes Zeichen zu verfolgen, nicht größer als das: .

Es funktioniert alles wie erwartet jetzt.

Verwandte Themen