Ich denke, die meisten von Ihnen werden wissen, dass Programmierer oft Code aus anderer Software wiederverwenden. Ich denke, die meiste Zeit ist es eine gute Idee. Aber wenn Sie Code aus einem anderen Projekt verwenden, hängt Ihr Programm von dem anderen Projekt ab.
In meinem aktuellen Fall habe ich drei Java-Projekte A, B und C. Jetzt benutzt A B und B C. Ich benutze Eclipse IDE und fügte B dem Buildpfad von A und C zum Buildpath von B hinzu Es gibt einen Compiler-Fehler, dass A etwas von C nicht lösen kann. Also muss ich C zum Build-Pfad von B hinzufügen.
Was ist also der beste Weg, um die Abhängigkeiten zu lösen und gleichzeitig Ihr Programm so unabhängig von anderen Projekten zu halten?
Ich würde gerne wissen, ist im Allgemeinen und in Bezug auf meine aktuelle Situation. Gibt es bessere Möglichkeiten, dies zu tun? I.e. Es gibt Klassenpfadeinstellungen in der Start / Debug-Konfigurationsansicht, aber ich denke, dass sie zur Kompilierungszeit nicht helfen werden.
Vielen Dank im Voraus.
Es klingt für mich so, als würden Sie tun, was Sie tun müssen, ohne ein Abhängigkeits-Management-Tool wie Ivy oder Maven zu integrieren, das Ihnen die Fähigkeit zum "transitiven Abhängigkeitsmanagement" bietet. Mit jedem dieser Werkzeuge können Sie einfach festlegen, dass A von B abhängt und B von C abhängt und sie werden automatisch wissen, dass A auch C benötigt.
Die Vorteile von Maven (das ist, was ich in Erfahrung habe) kommt auch ins Spiel, wenn es darum geht, Ihre Projekte für die Bereitstellung zu packen, da sie alle diese Abhängigkeiten (ganz in der Hierarchie) leicht zusammentragen und zusammenfügen können in einen Distributionsordner oder eine fette JAR, die alle Ihre Abhängigkeiten enthält. Es braucht etwas Lese- und Setup-Zeit, um in ein Tool wie Maven zu gelangen, aber es macht die Verwaltung Ihrer Abhängigkeiten viel einfacher, besonders wenn sie wachsen.
Wir benutzen Maven und es ist wichtig für unsere Projekte. Es ist eine gute Zeit für Sie zu lernen - Abhängigkeiten von mehr als 3 Projekten können beängstigend sein. Maven behandelt Versionen, so dass Maven, wenn Sie aus irgendeinem Grund auf Foo.1.2.3 angewiesen sind, sicherstellen wird, dass Sie nicht die falsche Version erhalten.
Aber es ist nicht trivial. Wenn Sie Netbeans verwenden, ist es besser integriert als Eclipse und kann Ihnen beim Lernen helfen. (Auch Projekte sind zwischen den beiden Systemen ziemlich umschaltbar).
Maven unterstützt viele Konzepte in seiner POM (pom.xml) -Datei einschließlich Lizenzinformationen, Mitwirkenden, Argumenten usw., so dass Sie weit mehr als nur das Abhängigkeitsmanagement erhalten. Und es unterstützt die Modularisierung von Projekten.
Überspringen Sie nicht die Lernkurve - Sie müssen wissen, wie es funktioniert. Aber Sie werden auch vorherige SO Fragen finden, die Ihnen helfen werden
Andere haben einige der guten Werkzeuge erwähnt, wobei Maven wohl die gebräuchlichste ist. Ivy ist ein weiterer, der mehr auf das Dependency Management abzielt. Ich persönlich benutze Gradle, das einige der besten Features unter einem bekannten groovy Wrapper hat ... der sich immer noch weiterentwickelt und spöttisch dokumentiert. ;)
Eine Sache, die beachtet werden muss, ist, wie diese Tools transitive Abhängigkeiten handhaben. In Ihrem Beispiel ist C eine transitive Abhängigkeit von A, weil A von B abhängt, das von C abhängt. Einige dieser Build-Tools werden diese Art von Abhängigkeit unterschiedlich behandeln und Sie überraschen, wenn Sie es am wenigsten erwarten.
Wenn A zum Beispiel tatsächlich auf Code von C verweist, dh: es hat eine Kompilierungszeitabhängigkeit von C, dann funktioniert Ihr A- & gt; B- & gt; C-Setup in etwas wie Maven. Auf der anderen Seite, Gradle wird Sie auch erklären, dass A hängt von C ... ab, da es tut. Laufzeitabhängigkeiten werden vollständig aufgelöst.
Die Überraschung kommt, wenn Sie etwas monatelang transitiv eingefügt haben und sich ein Teil Ihres Codes auf Aspekte von C verlassen hat und Sie entscheiden, dass Sie keine B-Abhängigkeit mehr benötigen. Plötzlich wird der Code nicht erstellt, bis Sie herausfinden, dass Sie eine A- & gt; C-Abhängigkeit angeben müssen. In diesem Beispiel ist das ziemlich trivial, aber manchmal nicht.
Und wenn so etwas dazu führt, dass dein Kopf ein wenig schwimmt und du nicht vorhast, dass dein Projekt viel komplizierter wird ... dann kannst du wahrscheinlich nur eine Weile bei dem bleiben, was du tust. Wie andere erwähnten, ist es der richtige Weg, dies zu tun, ohne dass Ihnen ein Tool hilft.
Zweifellos sollten Sie ein Abhängigkeitsverwaltungstool verwenden, wie die Leute bemerkt haben ... manuell, archivieren Sie jedoch B und C in B_C.jar. Testen Sie, dass Bs Abhängigkeit von C innerhalb des Jar aufgelöst ist.
Fügen Sie dann B_C.jar in den Klassenpfad ...
einDependency Management ist ein großes Thema. Maven, Ivy und andere Werkzeuge wurden entwickelt, um die Schmerzen mit einigem Erfolg zu lindern. Beide Tools erstellen eine Abhängigkeitshierarchie, sodass Sie nicht auf die beschriebene Situation stoßen. Sie haben auch Eclipse-Plugins, so dass Eclipse diese Hierarchie erkennt.
Um diese Frameworks wirklich zu verwenden, müssen Sie Ihren aktuellen Build-Prozess ändern. Maven braucht wahrscheinlich mehr Selbstverpflichtung als Ivy, aber beides ist nicht trivial und es dauert einige Zeit, bis man verstanden hat, wie man es aufstellt. Allerdings ist es sehr hilfreich, dass Ihre Abhängigkeiten klar definiert und verwaltet werden.
Tags und Links dependencies java buildpath