2016-06-29 7 views
2

Kürzlich war ich in einem ziemlich großen Problem mit einem dependency hell Problem in Java. Gibt es geeignete Verfahren, um es in Zukunft zu vermeiden?Was sind die bevorzugten Schritte, um Dependency Hell in Java zu vermeiden?

+0

Können Sie uns genauere Informationen zu Ihrem speziellen Problem geben? Das Lösen von Abhängigkeiten in den meisten Fällen ist ein schwieriges Problem (und meiner Erfahrung nach wird es durch OSGI nur um das Zehnfache komplizierter), aber es gibt einige Tricks, um bei mittelgroßen Projekten vernünftig zu bleiben. Die Kenntnis einer bestimmten Situation kann Ihnen helfen, Sie zu führen (Sie haben eine andere Situation im Umgang mit Abhängigkeiten in einer offenen Plattform wie Eclipse + Plugins im Vergleich zum vollständig internen System, das nur widersprüchliche rekursive Abhängigkeiten aufweist) –

+0

Der von Ihnen angegebene Link zeigt 8 Möglichkeiten löse diese Hölle, oder? – Andrew

+0

Eigentlich frage ich, wie zu vermeiden, nicht zu lösen, nachdem es passiert (was schwieriger ist). –

Antwort

4

Verwenden Sie zuerst Abhängigkeitsmanager wie Maven oder Gradle. Kein lib Ordner, der Drittanbieter-Jars enthält, offensichtlich keine Kopierklassen oder * .java-Dateien von einem anderen Projekt zu Ihrem. Entschuldigung, wenn das offensichtlich ist, aber ich sah viele Projekte, die mit einer solchen Technik gebaut wurden.

Die nächste Phase ist jedoch die Optimierung der Abhängigkeiten. Sie können Bibliothek A und B verwenden, die beide Bibliothek C verwenden. Es ist in Ordnung, wenn beide Bibliothek C derselben Version verwenden. Die Hölle beginnt, wenn sie von verschiedenen Versionen der Bibliothek C abhängen. In den meisten Fällen verursacht dies kein Problem und Sie können sich darüber überhaupt nicht im Klaren sein. Manchmal kann es jedoch Probleme verursachen. Um dies zu vermeiden, empfehle ich Ihnen von Zeit zu Zeit, den Abhängigkeitsbaum Ihres Projekts zu überprüfen, Duplikate zu finden, und wenn sie existieren, verwenden Sie den Ausschlussbefehl Ihres Abhängigkeitsverwalters, um ältere Versionen auszuschließen.

Dies kann jedoch fehlschlagen, weil Inkompatibilität dieser Versionen der Bibliothek. In diesem Fall gibt es keine allgemeine Möglichkeit, das Problem zu lösen. Manchmal müssen Sie ein (oder mehrere) Ihrer Abhängigkeiten zurückstufen, damit sie zusammen arbeiten und auf die neuere Version warten, die eine neuere Version von Bibliothek C verwendet (in unserem Beispiel).

Das Glück der Java-Programmierer im Jahr 2016 ist, dass die meisten Tools sind in der Regel Open Source und viele von ihnen sind für Beiträge (zB über github), so dass Sie manchmal Ihren Beitrag beitragen und sich selbst und anderen Entwicklern helfen können Holen Sie sich eine neuere Version schneller.