früher habe ich viel mit Pascal gemacht. Da konnte man Bibliotheken schreiben und in ein Verzeichnis ablegen, so daß man sie in jedem neuen Programm wieder verwenden konnte. Der Compiler fügte diese Units dann natürlich automatisch in die .exe-Datei mit ein.
Wie ist nun aber die Vorgehensweise bei Java? Was packages sind, weiß ich. Aber wo lege ich die ab, damit sie nicht nur für das aktuelle Projekt verwendbar sind, sondern für alle meine zukünftigen? Welche Einstellungen sind zu treffen? Und können die entsprechenden Klassen dann auch problemlos mit in die Jar-Datei genommen werden?
import brauchst du um im Quellcode zu sagen, dass du die entsprechenden Klassen benutzt. Und schließlich nur zur Kompilier- und Ausführungszeit das tatsächliche jar. In ein bestimmtes Verzeichnis muss dieses jar nicht. Allerdings in den CLASSPATH. Kann man der Java VM und dem Compiler über den Parameter -cp mitgeben. Oder halt in der verwendeten IDE einstellen.
Zu jar-Dateien findest du sicher einige Tipps in der FAQ dieses Forums.
Das heißt nun aber, daß die Klassen meiner Bibliothek NICHT in die jar-Datei des Endprogrammes eingefügt werden und ich also mehrere jars an den Kunden ausliefern muß?
Jawohl. Das ist auch so die Regel. Es gibt Möglichkeiten das ineinander zu integrieren (steht glaub auch was in der FAQ dazu), ist aber sehr untypisch (und wohl auch ursprünglich nicht so vorgesehen).
Ich habe mir gerade ein Skript geschrieben, welches externe Jars entpackt und die entstandenen Verzeichnisse zusammen mit dem Programm in ein neues packt. Interessant ist noch die Frage, ob das mit Jars von anderen Anbietern erlaubt ist, beispielsweise, wenn ich die Datenbank H2 nehme und die h2.jar auf diese Weise einbinde. Den Objektcode darf man ja problemlos mit verbreiten, aber ob auf diese Weise habe ich den Lizenzbestimmungen nicht entnommen.
Du musst die Sachen nicht entpacken. Du kannst die Bibliotheken die du verwenden möchtest gemeinsam mit deinem Programm in ein JAR-File packen und mit einer Manifestdatei angeben, dass diese Libs zum Klassenpfad gehören
Echt? Ich hatte hier im Forum schon öfter gelesen, daß genau das wohl nicht geht. Mit der Angabe
Class-Path: xyz.jar
(wobei xyz.jar die Bibliothek ist, die in die Programm-Jar integriert ist) klappt es jedenfalls nicht. Was muß ich da angeben?
Jars in Jars gehen nicht out of the Box sondern man braucht wieder spezielle Libs dafuer (z.B.: one-jar)
Bei eigenen libs ist es einfacher den Inhalt des externen jars mit in das neue jar zu mergen, ich mach sowas z.B.: mit ANT.