Verwaltung von Librarys

melmager

Erfahrenes Mitglied
Ich habe mal ein paar Fragen zu Java Librarys.
Eine Tool zu dem Thema ist ja Maven (ich habe mich ehrlich gesagt noch nicht darin eingearbeitet)

Das problem was ich bei Maven sehe ist das es eine bestimmte Ordnerstructur voraussetzt.
Die wurde auf Webanwendungen hin ausgelegt.
Leider legt Maven die benötigen Libs in das locale Verzeichnis vom Projekt ab.
Bei mehreren Projekten hat man also unter Umständen mehrere Libs doppel und dreifach auf dem Rechner.

Und wo ich grade drüber gestolpert bin:
Wie regel ich das mit maven (dem pom File) wenn eine eigen Lib erstellt wird ?

Was ich gern hätte:
Eine zentrales verzeichnis wo alle notwenigen Libs abgelegt werden.
Im Projekt selber eine Konfigdatei wo ich angeben kann welche Libs benötigt werden. erste Suche dann im zentralen localen verzeichnis und download wenn noch nicht vorhanden.
und wenn es in einer Lib ein bezug zu einer andren Lib gibt dieser recursive Bezug
automatisch aufgelöst wird.

so die Richtung wie es RPM bei Linux macht - das Tool löst ja abhängigkeiten selbst auf.

Nachtrag:
Apache Ivy klang gut, aber scheinbar wird das von Netbeans Version 8.x nicht mehr unterstützt
 
Zuletzt bearbeitet:
Hoi melmager,

ich gehe mal auf die einzelnen Punkte deines Post getrennt ein:
Das problem was ich bei Maven sehe ist das es eine bestimmte Ordnerstructur voraussetzt.
Die wurde auf Webanwendungen hin ausgelegt.
Naja, nicht zwangsweise. Die Struktur sieht vereinfacht gesagt so aus, dass du getrennte Ordner für Produktiv- und Testcode hast. Zusätzlich hierzu werden dann die Resourcen auch getrennt. Du hast dann also deine Produktivklassen unter "src/main/java" und deine Testklassen unter "src/test/java". Zusätzlich hierzu kannst du dann auch z.B. Scala-Klassen einbinden, unter "src/main/scala". Heir ist die Struktur ziemlich flexibel und erweiterbar.

Leider legt Maven die benötigen Libs in das locale Verzeichnis vom Projekt ab.
Bei mehreren Projekten hat man also unter Umständen mehrere Libs doppel und dreifach auf dem Rechner.
Ich weiss ja nicht, wie du maven konfiguriert hast, aber die Libs liegen unter "$HOME/.m2/repository". Zentral, halt für jeden Benutzer eigens. Das kann aber bei Bedarf natürlich auch umkonfiguriert werden, so dass z.b. ein Repository pro Rechner (nicht per User) verwendet wird.
Wenn du jetzt allerdings mit Maven ein "dist" machst, dann kopiert er alles was für die Runtime benötigt wird in den Buildordner. Das ist auch so beabsichtigt, kann aber natürlich auch konfiguert werden. Damit kann mvn dann zum Beispiel ein Fat-Jar bauen (alle Libraries in einem Jar mit deinem Code kombiniert)

Eine zentrales verzeichnis wo alle notwenigen Libs abgelegt werden.
Im Projekt selber eine Konfigdatei wo ich angeben kann welche Libs benötigt werden. erste Suche dann im zentralen localen verzeichnis und download wenn noch nicht vorhanden.
und wenn es in einer Lib ein bezug zu einer andren Lib gibt dieser recursive Bezug
automatisch aufgelöst wird.
Genau das macht Maven :) Siehe oben auch mit dem $HOME. Wenn du jetzt allerdings viele Entwickler hast, an verschiedenen Rechnern, dann hast du normalerweise einen Repository-Mirror. Das ist ein zentraler Server, der als kleiner Mirror von Maven Central (oder andere) dient. Der übernimmt dann wie eine Art Proxy die Verwaltung der Libraries. Somit fragen die Clients bei dem an, der lädt runter was er noch nicht hat und verteilt das dann lokal im Netzwerk. Spart vorallem dann Netzwerklast. Ein (kostenpflichtiges) Beispiel ist Artifactory.

Apache Ivy klang gut, aber scheinbar wird das von Netbeans Version 8.x nicht mehr unterstützt
Ivy ist tot. Ich bin da nicht der Fan von, habe da schon einige Schwierigkeiten mit Projekten von uns gehabt. Umständlich und teilweise auch absolut hirnrissig wie der die Dependencies auflöst. Wir haben regelmässig die gleiche Dependency mit unterschiedlichen Versionen im Classpath (Könnte aber auch an sbt liegen)

Persönlich bevorzuge ich Gradle. Kleine Buildfiles, Dependencies sauber angegeben und macht genau das was ich brauche. Die Integration in IntelliJ ist auch gut, für Eclipse / Netbeans gibts da sicher auch Plugins.

Grüsse,
BK
 
Kurze Nachfrage:
Wenn ich auf Gradle umsteige und ich eine eigenes Lib erstelle kann ich dort ein
ein File mit Dependencies anlegen wo meine Lib aufsetzt ?
Sprich im Projekt gebe ich als Dependencie mein Lib an und er zieht sich dann
das Lib was meine Lib braucht ?
Siehe Paketmanager bei Linux - der zieht ja auch alles nach (man wählt ein Programm aus und bekommt 5 Libs dazu :-) )
 
Zurück