Was ist der beste Weg, um zu teilen-Gläser in mehreren Projekten?
Wenn Sie mehrere Projekte haben, die alle den gleichen Satz von JAR-Bibliotheken, es ist mühsam, Sie zu umfassen, die gleichen Gläser wieder und wieder mit jedem Projekt. Wenn ich arbeite auf 20 verschiedene Projekte, die ich lieber nicht haben, 20 der genaue Satz von JAR-Dateien herumliegen. Was ist der beste Weg, um all diese Projekte (und für neue Projekte als auch) auf den gleichen Satz von Gläsern?
Ich habe einige Ideen, aber jeder von Ihnen hat einige Nachteile:
- Alle JARs in einem Ordner und haben jeweils ein Projekt suchen Sie in diesem Ordner.
- Mit Eclipse erstellen einer "User-Library" und haben jedes Projekt, Referenz, user-library.
- Erstellen Sie eine "Bibliothek" - Projekt, verweist jedes GLAS, und jedes Projekt-Referenz, die Bibliothek-Projekt.
- das Problem mit den user-libs ist, dass jeder Benutzer benötigt, um Sie einzurichten. wenn Sie lib-Projekte, die Sie überprüfen, in und jeder ist definitiv mit der gleichen version mit allen Abhängigkeiten
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Maven oder Ivy mit diesen geteilten Gläsern. Wenn Sie sind vorsichtig, wenn Sie Ihre Projekte zu viel, können Sie einfach Ivy für die Verwaltung der zusätzlichen classpath für Sie.
Beide haben gute Eclipse-Plug-ins:
m2eclipse
Maven die classpath-container http://img229.imageshack.us/img229/4848/mavendependencies.png
IvyDE
IvyDE classpath-container http://img76.imageshack.us/img76/3180/cpnode.jpg
welche ich verwendet habe, mit guten Ergebnissen.
Werden Sie feststellen, dass die beiden Referenz-Gläser außerhalb der Arbeitsfläche, so dass die Duplizierung wird entfernt.
Update ( angeregt durch Kommentare ):
Mein Grund für die Empfehlung dieser Vorgehensweise ist, dass ich stark glaube, dass es einfacher und klarer zu erklären Abhängigkeiten eher dann manuell an. Es gibt eine kleine einmalige Kosten im Zusammenhang mit dieser kleineren für Ivy als für Maven - aber auf lange Sicht zahlt sich aus.
Anderen, kleineren, profitieren, ist die Behandlung der transitiven und widersprüchliche Abhängigkeiten. Es ist leicht zu vergessen warum, die Sie brauchen, dass commons-logging-1.1.jar in den classpath und ob Sie benötigen, um ein upgrade auf 1.1.1. Und auch ist es kein Spaß zu ziehen, in all den depencies erforderlich für z.B. ein Hibernate + Annotation + Feder-combo. Fokus auf der Programmierung, nicht Gebäude.
Ob Sie es glauben oder nicht, Ihre "mühsam" - Ansatz ist wahrscheinlich die einfachste, sauberste und am wenigsten zeitaufwändige Ansatz da ist.
Vor dem Sprung auf die maven auf den fahrenden Zug aufspringen, sollten Sie überlegen, was wirklich falsch mit die Dinge, wie Sie sind derzeit Sie zu tun. Sie haben erwähnt, dass es langweilig ist, und Sie haben eine Menge von jar-Dateien herumliegen. Ich erstellt den build-Prozess auf einem großen multi-Modul-Projekt mithilfe von Maven, dann verbrachte die nächsten 18 Monate kämpft mit ihm ständig. Glauben Sie mir, es war mühsam und es gab eine Menge von jar-Dateien herumliegen.
Da gehen wir zurück zu Ant und Begehen Gläser-source-control neben den Projekten, die Sie verwenden, es hat eine viel glattere Fahrt.
Ich Speichere eine Reihe von jar-Dateien in einem einzigen Verzeichnis auf meinem Rechner und wenn ich dann ein neues Projekt erstellen oder hinzufügen eine neue jar-Datei zu einem bestehenden Projekt, es dauert nur etwa 30 Sekunden:
Über den Verlauf des Projekts, das 30 Sekunden ist unbedeutend, aber es bedeutet, ich muss ein Projekt überprüft werden kann die out-of-source-control und funktioniert einfach, ohne dass irgendwelche custom Eclipse-Konfiguration oder Maven Installationen oder Benutzer-spezifischen setup.
Dieser Ansatz hat mich gerettet und mein Projekt-team eine Menge Zeit, vor allem, weil es ist einfach, zuverlässig und leicht zu verstehen.
Update: Klarstellung veranlasst durch Kommentare
@Robert Munteanu: vielen Dank für das feedback und aktualisierte Kommentare. Das klingt vielleicht etwas umstritten, aber ich fürchte, ich kann nicht mit Ihnen einverstanden, dass Maven ist einfacher und klarer, oder es wird sparen Sie Zeit auf lange Sicht.
Aus deinem posting:
"Ich glaube fest daran, dass es einfacher und klarer zu deklarieren Abhängigkeiten eher dann manuell an. Es gibt eine kleine einmalige Kosten im Zusammenhang mit dieser kleineren für Ivy als für Maven - aber auf lange Sicht zahlt sich aus".
Kann es leichter zu haben Maven download eine jar-Datei, für die Sie als download es selbst, aber das ist der einzige Vorteil. Ansonsten Maven ist nicht einfacher, nicht klarer und seinen Komplexitäten und Einschränkungen kostet Sie auf lange Sicht.
Klarheit
Den beiden Abhängigkeit Erklärungen unten das gleiche tun. Ich finde die Ameise eine viel klarer als die Maven ein.
Ant Stil:
Maven Stil:
Einfachheit
Mit der Ant-version können Sie den Mauszeiger über die ${log4j.jar} Eigenschaft und es wird Ihnen zeigen den absoluten Pfad zu der jar-Datei. Sie können suchen, für den Einsatz von kompilieren.classpath. Es gibt nicht eine ganze Menge mehr, die Sie brauchen, um wissen.
Es ist keine Frage, dass Maven ist komplexer als der Ansatz, den ich Vorschlage. Wenn Sie beginnen, mit Maven-dies sind nur einige der Fragen, die beantwortet werden müssen.
Transitive Abhängigkeiten
"Ein weiterer, kleiner Vorteil ist die Behandlung der transitiven und widersprüchliche Abhängigkeiten."
Meiner Erfahrung, transitive Abhängigkeiten sind mehr ärger als Sie Wert sind. Sie am Ende mit mehreren Versionen der gleichen jar-Datei und Sie am Ende mit optionalen jar-Dateien, die Sie nicht wollen. Ich landete Deklaration gerade ungefähr alles, was mit Rahmen zu vermeiden, den Aufwand.
Die Langfristige Belohnung
"Fokus auf der Programmierung, nicht die Gebäude."
Stimme ich zu. Da gehst zurück zu Ant und die Umsetzung meiner jar-Dateien in der Quellcodeverwaltung ich in der Lage gewesen zu verbringen weit weniger Zeit den Umgang mit build-Themen.
Diese sind die Dinge, die ich weniger Zeit damit verbringen, zu tun:
Sowieso, sorry für das lange posting. Vielleicht ist jetzt, dass ich habe, dass aus meiner Brust kann ich bringen einige Schließung zu meinem langen und schmerzlichen Maven Erfahrung. 🙂
Es hängt von Ihren Bedürfnissen ab, aber es gibt mehrere brauchbare Möglichkeiten. Meine Arbeit verwendet einen externen Ordner und alle Projekte verweisen, die Ordner, das macht das Leben leichter läuft, baut außerhalb von eclipse. Ein user-library ist eine leicht angenehme Art, Dinge zu tun, so lange es dich nicht stört, der leichte eclipse Abhängigkeit. Ich sehe nicht eine ganze Menge profitieren, um ein Bibliothek-Projekt auf seine eigene, aber wenn Sie haben eine Art von universal 'util' Art-Projekt, dass alle anderen Projekte, die bereits geladen, können Sie einfach stecken Sie alle externen jars in das Projekt.
Ein Ansatz ist, um alle Ihre jar-Dateien in einem Ordner auf Ihrem Rechner, in Ihrer eclipse-ide, eine Umgebungsvariable definieren, sagen LIB_LOCATION, verweist auf das Verzeichnis und haben Ihre Projekte verwenden Sie die Gläser, in Bezug auf diese variable. Auf diese Weise erhalten Sie die Benutzerfreundlichkeit, nicht mehrere Gläser, portabel Maschinen, solange Sie die Variablen richtig definiert. Ich habe versucht maven für eine Gruppe von anständigen Größe-Projekte und es scheint, ich habe zu kämpfen, mindestens so viel wie ich sollte. Bugs und WLAN-Verhalten in den plug-ins m2eclipse und q4eclipse.
Könnten Sie " Bearbeiten "Installierte JREs", um Ihre JAR-Datei ("Add external JARs"), fügen Sie die Datei jdk\jre\lib\ext\ Verzeichnis, oder geben Sie eine CLASSPATH Umgebungsvariable mit dem Pfad zu.
Ich würde empfehlen, die "Bibliothek" - Projekt-Ansatz.
Aber noch besser -- eine separate lib Projekt pro externe jar-damit können Sie verfolgen, deps zwischen Drittanbieter-jars und wissen, was sich ändern muss, wenn Sie ein Upgrade einer Abhängigkeit.
Stellen Sie sicher, dass Sie überprüfen, die in diesen Projekten, so dass alle Benutzer die gleichen Versionen von third-party-libs und so können Sie leicht regenerieren eine version der software (mithilfe von tags/labels in Ihre Versionskontrolle, die Gruppe, welche Versionen von welchen Projekten zusammen gehen)
Wir haben beschlossen, auf eine mehr langwierige Methode, aber die es uns ermöglicht haben, alles inhouse, aber wahrscheinlich nur für eine kleine Gruppe von Entwicklern.
Jeden Satz von jar-Dateien eingerichtet ist als ein Eclipse-Projekt mit dem Namen angemessen, nachdem das Glas gesetzt, Hinzugefügt, um den build path, source-jar-Dateien und javadoc-Gläser korrekt einstellen auf jedes jar in den build-Pfad, und jedes Projekt, dann schließt die Bibliothek Projekte, die wir für dieses Projekt. Die daraus resultierende multi-Projekt-workspace wird dann exportiert als ProjectSet.psf-Datei, die dann ausgelesen werden, in eine raw-Eclipse bringt in den gesamten Arbeitsbereich wieder. Wir haben dann alle die oben genannten Projekte in CVS-einschließlich jar-Dateien.
Dieser arbeitete sehr wellf oder uns.
Wenn Sie in einer größeren Organisation den Umgang mit Abhängigkeit in Maven kann gut für Sie arbeiten. Sollte man definitiv haben einen lokalen cache von Artefakten, so dass die ganze Welt hört nicht auf, wenn Ihre internet-Verbindung verloren gegangen ist.
Beachten Sie auch, dass die neue Eclipse 3.5 coming out in diesem sommer, wird ein "Create Runnable Jar" die Ausgabe der benötigten Gläser neben die generierte ausführbare jar, und legen Sie die Class-PAth-Zeile im Manifest korrekt. Ich erwarte, dass eine große Zeit-ersparnis - check it out.