Also, da ja soviele ärger haben das man Jar Files in andere Jar Files packen kann mache ich mal eine kleine FAQ dazu!
Die Erläuterungen zu Manifest.MF -> also was da drinnen stehen mußt, solltet ihr schon wissen, ich gehe hier nur drauf ein, wie ich ein Jar File via dem jar Befehl in ein anderes Jar File packen kann.
Also grundsätzlich geht das eigentlich gar nicht, man muss das Jar File (ich nehme hier den neueste ODBC-Treiber von Oracle - http://download.oracle.com/otn/utilities_drivers/jdbc/9205/ojdbc14.jar ) entpacken und wieder reinstecken!
Also das man ein Jar File einfach reinkopiert und dann sagt man lässt den Classpath drauf zeigen funktioniert nicht (vielleicht gehts irgendwie, aber das will ich nicht näher behandeln).
Meine Methode fügt einfach alle Klassen in das jar-File und somit ist eine Angabe von einem Classpath nicht nötig, da alles in einem Paket liegt.
Macht man zB das ojdbc14.jar auf (mit einem Zip Programm - ich habe WinRar) so sieht man diese Ansicht:
So, das gesamte ojdbc14.jar extahiert man jetzt. Extrahiert man es mit Rechtsklick->Extrahieren, so extrahiert er es in ein Verzeichnis das gleich heißt wie die jar Datei.
Also ojdbc14.jar => in diesem Verzeichnis sind jetzt die Ordner: Oracle und META-INF. Das Manifest.MF von Oracle ist zwar hübsch anzusehen, wird aber von uns nicht mehr wirklich benötigt.
Also kopiert man den Ordner Oracle raus und den Ordern "ojdbc14" mit dem Unterordner "META-INF" kann gelöscht werden. Wir benötigen nur den Ordner mit den ganzen *.class Dateien.
Das Manifest.MF von eurer Jar Datei wird (optional) auch im selben Verzeichnis benötigt wie das von euch erstellte Jar-File.
Das entspricht dieser Ansicht:
Danach geht ihr via command (cmd) oder konsole ins gleiche Verzeichnis. In meinem Fall
"C:\Develop\Kunden\Billa\cspm\cspm_table_conv\jarfaq>"
Also cmd => cd C:\Develop\Kunden\Billa\cspm\cspm_table_conv\jarfaq>
Dann kommt der "magische Befehl" mit dem ihr das Archiv zusammenbaut. (*)
jar -ufvm cspm_table_conv.jar MANIFEST.MF -C oracle/ /
(Da das MANIFEST.MF optional ist, kann der Befehl auch so aussehen:
jar -ufv cspm_table_conv.jar -C oracle/ /)
Was tut dieser Befehl?
Also: jar = klar das Programm von Sun was die Jar-Files zusammenbaut
-u = refreshen, sodass euer bisher hergestelltes Jar-File nicht überschrieben wird.
-f = wohin soll er es packen
-v = das berühmte verbose aus Linux => das angezeigt wird was gemacht wird! (optional)
-m = welches Manifest er nehmen soll (also unseres - optional)
-C = nimm Dateien von einem anderen Verzeichnis
oracle/ / = nimm das Oracle Verzeichnis und wandle alles in den Dateinamen / um (also bleib gleich)
Achtung!! Mir ist gerade aufgefallen, führe ich diesen Befehl aus
jar -uvmf cspm_table_conv.jar MANIFEST.MF -C oracle/ / => so bekomme ich eine java.io.Exception: line to long! Also die Reihenfolge der Parameter hier scheint doch wichtig zu sein!
Und so sollte es dann aussehen (das letztere von den 2 Jar Files)
(*) Falls man gleichzeitig das Jar File erstellen will und das andere jar File reinpacken will, so kann man diesen Befehl ausführen:
jar -cfv cspm_table_conv2.jar -C oracle/ / -C cspm_table_conv/ /
Habe das MANIFEST.MF hier weggelassen, um zu zeigen, dass das MANIFEST.MF immer optional ist!
Wobei im Ordner cspm_table_conv wieder die ganzen Klassen sind (so wie im Oracle Ordner).
Die Erläuterungen zu Manifest.MF -> also was da drinnen stehen mußt, solltet ihr schon wissen, ich gehe hier nur drauf ein, wie ich ein Jar File via dem jar Befehl in ein anderes Jar File packen kann.
Also grundsätzlich geht das eigentlich gar nicht, man muss das Jar File (ich nehme hier den neueste ODBC-Treiber von Oracle - http://download.oracle.com/otn/utilities_drivers/jdbc/9205/ojdbc14.jar ) entpacken und wieder reinstecken!
Also das man ein Jar File einfach reinkopiert und dann sagt man lässt den Classpath drauf zeigen funktioniert nicht (vielleicht gehts irgendwie, aber das will ich nicht näher behandeln).
Meine Methode fügt einfach alle Klassen in das jar-File und somit ist eine Angabe von einem Classpath nicht nötig, da alles in einem Paket liegt.
Macht man zB das ojdbc14.jar auf (mit einem Zip Programm - ich habe WinRar) so sieht man diese Ansicht:
So, das gesamte ojdbc14.jar extahiert man jetzt. Extrahiert man es mit Rechtsklick->Extrahieren, so extrahiert er es in ein Verzeichnis das gleich heißt wie die jar Datei.
Also ojdbc14.jar => in diesem Verzeichnis sind jetzt die Ordner: Oracle und META-INF. Das Manifest.MF von Oracle ist zwar hübsch anzusehen, wird aber von uns nicht mehr wirklich benötigt.
Also kopiert man den Ordner Oracle raus und den Ordern "ojdbc14" mit dem Unterordner "META-INF" kann gelöscht werden. Wir benötigen nur den Ordner mit den ganzen *.class Dateien.
Das Manifest.MF von eurer Jar Datei wird (optional) auch im selben Verzeichnis benötigt wie das von euch erstellte Jar-File.
Das entspricht dieser Ansicht:
Danach geht ihr via command (cmd) oder konsole ins gleiche Verzeichnis. In meinem Fall
"C:\Develop\Kunden\Billa\cspm\cspm_table_conv\jarfaq>"
Also cmd => cd C:\Develop\Kunden\Billa\cspm\cspm_table_conv\jarfaq>
Dann kommt der "magische Befehl" mit dem ihr das Archiv zusammenbaut. (*)
jar -ufvm cspm_table_conv.jar MANIFEST.MF -C oracle/ /
(Da das MANIFEST.MF optional ist, kann der Befehl auch so aussehen:
jar -ufv cspm_table_conv.jar -C oracle/ /)
Was tut dieser Befehl?
Also: jar = klar das Programm von Sun was die Jar-Files zusammenbaut
-u = refreshen, sodass euer bisher hergestelltes Jar-File nicht überschrieben wird.
-f = wohin soll er es packen
-v = das berühmte verbose aus Linux => das angezeigt wird was gemacht wird! (optional)
-m = welches Manifest er nehmen soll (also unseres - optional)
-C = nimm Dateien von einem anderen Verzeichnis
oracle/ / = nimm das Oracle Verzeichnis und wandle alles in den Dateinamen / um (also bleib gleich)
Achtung!! Mir ist gerade aufgefallen, führe ich diesen Befehl aus
jar -uvmf cspm_table_conv.jar MANIFEST.MF -C oracle/ / => so bekomme ich eine java.io.Exception: line to long! Also die Reihenfolge der Parameter hier scheint doch wichtig zu sein!
Und so sollte es dann aussehen (das letztere von den 2 Jar Files)
(*) Falls man gleichzeitig das Jar File erstellen will und das andere jar File reinpacken will, so kann man diesen Befehl ausführen:
jar -cfv cspm_table_conv2.jar -C oracle/ / -C cspm_table_conv/ /
Habe das MANIFEST.MF hier weggelassen, um zu zeigen, dass das MANIFEST.MF immer optional ist!
Wobei im Ordner cspm_table_conv wieder die ganzen Klassen sind (so wie im Oracle Ordner).