2015-01-11 8 views
5

Ich habe eine kritische Klassenpfad-Reihenfolge, aufgrund derer ich sicherstellen muss, dass ein JAR 1 vor JAR 2 im Klassenpfad kommt.Gibt es eine Möglichkeit, die Reihenfolge festzulegen, in der Abhängigkeiten (wie in der Eclipse-IDE) im Klassenpfad angeordnet sind (Kompilieren und Runtime)?

Gibt es eine Möglichkeit, dies in der GRADLE_DEPENDENCIES in der Eclipse-IDE zu erzwingen.

Gibt es Einsichten darüber, wie dies beim Verpacken der Anwendung (Verteilung) erreicht werden kann?

+0

Ja, Sie können es durch Abhängigkeiten tun, aber beachten Sie zwei Regeln der höheren Priorität: http://Stackoverflow.com/a/38743046/715269 – Gangnus

Antwort

6

Im Idealfall sollten Sie die Abhängigkeiten in Ihren Projekten beheben, damit Sie genau die richtige Menge von Gläsern im Klassenpfad haben. Sehen Sie sich an, wie Sie Abhängigkeiten in Kapitel Dependency Management in der Gradle-Dokumentation ausschließen können.

Wenn Sie noch Klassenpfad-Einträge für Eclipse ändern möchten, ist hier eine mögliche Lösung.

Sie können mit der .classpath Datei durch die eclipse Aufgabe in Gradle mit dem folgenden erzeugt herumzubasteln:

eclipse.classpath.file { 
    withXml { 
     // This returns a the classpath XML root node (groovy.util.Node) 
     def node = it.asNode() 

     // Do the re-rodering of classpath entries by modifying the node object 
    } 
} 

Werfen Sie einen Blick auf groovy.util.Node für Methoden können Sie den XML-Knoten anzuzeigen/ändern verwenden.

Beachten Sie, dass Sie höchstwahrscheinlich keine Kontrolle über die Klassenpfad-Reihenfolge haben, die ausgeführt wird, wenn Sie die Distribution der gepackten Anwendung in einer JVM ausführen, die Sie zur Laufzeit zurück in den ersten Bereich bringt, wenn die Anwendung tatsächlich ausgeführt wird.

Daher ist die beste Lösung, die Quelle der JAR-Abhängigkeit zu finden, die Sie nicht in Ihrem Klassenpfad haben möchten, und sie von dort zu eliminieren, statt sich auf die Klassenpfadordnung zu verlassen, die riskant und unzuverlässig ist.

+0

Danke für die gut abgerundete Antwort. Ich habe erkannt, dass das Problem auf einen Versionskonflikt eines Krugs zurückzuführen ist, der als transitive Abhängigkeit hinzugefügt wird. Ich habe das Problem gelöst, indem ich es in der Dependency-Deklaration mit der Funktion "exclude" ausgeschlossen habe. Nochmals vielen Dank für die informative Antwort. – acthota

+0

Kann nicht upvote :(Ich bin nicht genug bekannt zu upvote. – acthota