Der richtige Umgang mit externen Bibliotheken in Java (mit Eclipse)

8

Dies ist in gewisser Weise eine Fortsetzung einer zuvor unbeantworteten Frage von mir ( Link ), die in den letzten Wochen excelliert wurden, und jetzt ist es soweit, dass ich mich nicht mehr wirklich entwickeln kann ...

Also hier ist der Deal; Ich habe eher einen mathematisch / ingenieurwissenschaftlichen Hintergrund als reine CS, daher habe ich nicht viel Erfahrung mit richtiger / großangelegter Softwareentwicklung, sondern eher mit Skripten und Algorithmen. Jetzt, da ich alleine an einem großen Projekt arbeite, bin ich verwirrt mit einigen Aspekten der Entwicklung. Einer von ihnen ist Umgang mit Bibliotheken / Abhängigkeiten

Ich habe ursprünglich einen Ordner mit dem Namen lib in meinem Projektordner (im Eclipse-Arbeitsbereich) erstellt und dort meine externen Bibliotheken kopiert und sie dann dem Build-Pfad hinzugefügt. Später brauchte ich noch ein paar andere Sachen wie JCommons , JFreeChart , Apache Commons Math usw .. Gemäß den Anweisungen können / sollten diese Bibliotheken als Benutzerbibliotheken enthalten sein, so dass der Entwickler die Dokumentation und den Quellcode von IDE aus sehen kann (wie Eclipse). Ich habe es soweit richtig gemacht, hoffe ich ...

Wo ist das Problem? Nun, zuerst erschien es, da die oben erwähnten Benutzerbibliotheken nicht in der SVN-Kopie des Projekts enthalten sind, was bedeutet, dass meine Kollegen, die mein Projekt testen wollten, dies nicht tun konnten, indem sie einfach das Projekt von SVN erwarben. Jetzt, wo die zweite Phase des Problems nicht behoben wurde, wenn ich meine Arbeitsstation bei der Arbeit änderte, wollte ich mein Projekt von meinem Backup in Eclipse importieren, aber dann ist alles außer diesen Benutzerbibliotheken da. Um die Sache noch komplizierter zu machen, wenn diese Software fertig ist, wird sie auf einem Server implementiert, so dass es am besten wäre, wenn alles in eine einzige Bibliothek oder sogar eine ausführbare jar -Datei gepackt werden könnte.

Mir wurde vorher geraten, einen Blick auf Maven oder Ivy zu werfen, aber mein anfängliches Verständnis, nachdem ich beide überprüft habe, ist, dass sie von Anfang an verwendet werden und meistens für kompliziertere Projekte. Ehrlich gesagt bin ich völlig verwirrt darüber, wie ich meine Abhängigkeiten verwalten soll. Irgendwelche Ideen?

(Entschuldigung dafür, dass ich es lange gemacht habe, aber ich dachte mir, dass es besser ist, vollständige und lange, dann unzureichende Informationen)

BEARBEITEN: Ich habe es geschafft, das Problem zu lösen. Das Problem ist anscheinend auf die einfache Tatsache zurückzuführen, dass Eclipse nicht alle Ressourcen an einen Ort kopiert, und die Installationsanweisungen für einige Bibliotheken warnen Sie nicht wirklich davor, wie Sie die Bibliotheken optimal verwalten.

Danke an alle, die sich die Zeit genommen haben, mir zu helfen. Ich werde mit der Zeit mehr auf Projekte wie Maven und Ivy schauen, es ist definitiv interessantes Zeug. Aber für den Moment muss ich nur zurück zur Software in den laufenden Zustand, zu lange mit neuen Sachen ringen. :)

    
posdef 10.09.2010, 09:56
quelle

6 Antworten

10

Auf die Gefahr hin, eine Ketzerei zu begehen, würde ich sagen, Maven und wot - sind hier nicht übertrieben. Sie brauchen Ihre Abhängigkeiten in Ihrem SVN-Projekt, so einfach. Sie haben Ihren Build-Pfad in Eclipse Ihrem lib-Ordner hinzugefügt, und das ist in Ordnung. Aber wenn Sie nicht ausdrücklich den Inhalt des lib-Ordners zu Ihrem Projekt hinzufügen (wie von Fred beschrieben), können diese Elemente nicht für SVN festgelegt werden - sie werden einfach im Klassenpfad Ihrer Einrichtung referenziert. Das ist gut für dich, nicht gut für jemanden, der dein Projekt überprüfen möchte (wie du herausgefunden hast).

Ich weiß zu schätzen, dass wir endlose Diskussionen über Best Practice, die Gültigkeit von Bibliotheken von Drittanbietern für die Versionskontrolle und so weiter führen können ... aber ich denke, die meisten Leute haben Arbeit zu tun ;-)

>     
Ben 10.09.2010, 10:58
quelle
4

Investieren Sie etwas Zeit, um zu lernen, wie Sie mit Maven ein Projekt erstellen. Es macht einfach so viele Dinge für dich, dass es unglaublich ist.

    
Boris Pavlović 10.09.2010 10:03
quelle
2

Okay, ich denke, das kann gelöst werden.

In Eclipse gibt es im Java-Build-Pfad-Bildschirm auch eine Import-Jar-Bibliothek, mit der Sie den Projekt-Lib-Ordner auswählen können. Tatsächlich gibt es eine Auswahl namens Ordner, die ich glaube ..

Die andere Sache, da es auf einem Server bereitgestellt wird, müssen Sie jedes Glas im lib-Ordner haben.

Es gibt eine Ameisenmethode, bei der Sie nach einer Klasse und einer Eigenschaft im Jar suchen, um zu überprüfen, ob das richtige jar aus dem lib-Ordner importiert wird, bevor Sie mit dieser Sequenz fortfahren. Machen Sie eine Google-Suche und Sie werden finden die Beiträge darüber ..

    
Fred Grott 10.09.2010 10:06
quelle
2

Die drei Optionen sind:

  • Maven ( refcard ) - ein sehr leistungsfähiges Werkzeug, aber gleichzeitig sehr einfach zu bedienen. Ich benutze es in all meinen Projekten, egal wie klein sie sind. Es ist das Abhängigkeitsmanagement + Build-Tool in einem
  • Ivy - ähnlich wie Maven, aber es ist nur ein Werkzeug für die Abhängigkeitsverwaltung. Sie müssten Ihre Builds mit ant
  • erstellen
  • committing jars & amp; Eclipse-Projektdateien - das ist nicht zwischen IDEs übertragbar, aber ist eigentlich nicht so schrecklich und wird in vielen Projekten verwendet

Update: ein paar Worte, die die Ideologie der Maven erklären:

  • Konvention über Konfiguration - Sie strukturieren Ihr Projekt auf eine vordefinierte Weise. Das hat nichts mit Abhängigkeitsverwaltung zu tun, also erwähne es einfach.
  • Repositories - dort befinden sich die JAR-Dateien. Sie befinden sich nicht in Ihrem SVN, weil sie einen separaten Mechanismus der Versionierung haben und weil sie unnötigen Speicherplatz beanspruchen.
  • IDEs integrieren sich in maven. Zum Beispiel m2eclipse werden die Maven-Abhängigkeiten abgerufen und an Ihren Eclipse-Build-Pfad angehängt, was die Verwendung transparent macht
  • Abhängigkeitsauflösung - in pom.xml definieren Sie mehrere <dependency> -Tags mit Namen und Version, und maven ruft alle erforderlichen jars aus den Remote-Repositories ab. Es ruft auch Gläser ab, von denen Ihre Abhängigkeiten abhängen (transitive Abhängigkeiten). Somit haben Sie nicht NoClassDefFoundException .

Für mich ist das extrem einfach: Sie definieren was Sie brauchen, und maven entscheidet, wie Sie es holen und wie Sie es zu Ihrem Klassenpfad hinzufügen.

    
Bozho 10.09.2010 10:51
quelle
0

Sie müssen kein kompliziertes Projekt oder ein Greenfield-Projekt haben, um von Maven zu profitieren, also würde ich den Ratschlag, den Sie bereits gegeben haben, dazu nutzen, es auszuprobieren.

Wenn Sie es wirklich nicht wollen, sollten Sie Ihre Bibliotheken wirklich zusammen mit Ihrem Code in SVN einchecken. Wenn eine Version Ihres Codes zu einem bestimmten Zeitpunkt auf einer bestimmten Bibliothek beruht, gibt es dort einen Vertrag . Wenn Sie die Bibliotheken in SVN nicht berücksichtigen, brechen Sie diesen Vertrag - etwas, das Sie bereits haben gefunden, da Sie Ihre Anwendung nicht von Grund auf neu erstellen können.

Was das Packen in einer einzigen JAR betrifft - das ist mit Ant möglich, aber warum sollten Sie das tun?

    
tddmonkey 10.09.2010 10:04
quelle
0

In unserem Unternehmen haben wir ein separates SVN-Repository für Bibliotheken von Drittanbietern, und wir haben eine Firmenregel, die auf allen Entwicklungs-Workstations dieses Repository nach C: \ dev auscheckt. Also jeder, hat die Bibliotheken am richtigen Ort und die Projekte funktionieren gut.

    
huo73 10.09.2010 10:25
quelle

Tags und Links