Thema JAR-Erstellung (mal wieder) => etwas komplizierter

Status
Nicht offen für weitere Antworten.
A

Arki

Gast
Hi,
also ich will für mein Projekt eine JAR-Datei erstellen, allerdings beschränkt sich das nicht darauf, nur .class Dateien mit reinzupacken, sondern ich muss auch andere Bibliotheken die als JAR-Datei mitkommen ebenfalls in mein endgültiges JAR-File packen. Dazu habe ich mir auch ein kleines ANT-Skript geschrieben, wodurch das ganze Prozedere um einiges erleichtert wird. Also um zum Punkt zu kommen: Das Erstellen des JAR-Files und auch das Ausführen dessen klappt wunderbar. Wenn ich jedoch dann Funktionaliät aus meinem Programm aufrufe, welche auf den eingebundenen JAR-Dateien basiert, dann beomme ich eben Exceptions, weil die betreffenden KLassen nicht gefunden werden können.

Ich denke mal, dass das evtl mit meiner Projektstruktur zusammenhängen kann. Die sieht nämlich hier (zusammengefasst) so aus:
/src => Alle Sourcecodes
/lib => Hier sind all meine externen JAR-Files die ich später aber auch in meinem endgültigen JAR File haben will (hier sind also Library1.jar und Libarary2.har)
...

Die Manifest-Datei (welche ich auch mit ANT generiere) sieht dann so aus (das wesentliche):
Main-Class: de.test.myproject.MyClass
Class-Path: Library1.jar Library2.jar

Und in ANT gebe ich dann ebend beim jar-Task an, dass er den Lib ordner auch mitbenutzen soll (also per fileset).

Naja ist jetzt vielleicht etwas verwirrend, aber ich hoffe sehr, dass mir irgendjemand helfen kann... danke.
 

L-ectron-X

Gesperrter Benutzer
Wenn die externen Jar-Dateien im Verzeichnis lib auf deiner Festplatte liegen und eine Verzeichnisebene höher deine Jar-Datei dann muss die Class-Path Angabe im Manifest so aussehen:
Code:
Class-Path: lib/Library1.jar lib/Library2.jar
 
G

Guest

Gast
Ja also sowas dachte ich auch zuerst, aber das hat nichts gebracht. Ich habe die JAR-Datei mal entpackt und da sieht die Struktur so aus:
/de/test/... (also hier sind halt die ganzen Class-Files in den entsprechenenden Package-Ordnern)
/META-INF Hier ist die Manifest-Datei
/Library1.jar
/Library2.jar

d.h. in meinem endgültigen JAR gibt es diesen lib Ordner gar nicht mehr, da ich diese externen JARs auch einfach so reinkopiere. Vielleicht sollte ich mal mein ANT-Script posten ? Ich weiß halt nicht ob das was bringt bzw. erwünscht ist.

Also ich weiß nicht vielleicht habe ich mich auch nicht gut genug ausgedrückt. Wenn ich mein JAR in einem Ordner erstelle (z.B. dist), dann funktioniert das alles einwandfrei wenn ich die beiden anderen verwendeten Biblioheken ebenfalls dorthin kopiere, d.h. das sieht dann so aus:
/dist
-> MyJar.jar
-> Library1.jar
-> Library2.jar

Was ich allerdings will, ist, dass ich nur dieses eine JAR (MyJar.jar) benötige, und die beiden Bibliotheken, dann ebenfalls *in* diesem JAR drinnen sind und ich die von innerhalb dieser JAR datei verwenden kann. Das ist das Problem
 
G

Guest

Gast
Ah verdammt... sry... ich kannte den einen Beitrag in der FAQ wo es eben allgemein ums JAR-File bauen geht, aber ich hab den anderen, wo es um die Verschachtelung geht erst jetzt gesehen. Danke schön.
Aber wenn ich das jetzt richtig gelesen habe, dann kann ich ja die Lösung mit meinem Ant-Script eigentlich vergessen oder? Das muss man dann ja nachträglich von Hand machen, es sei denn es gibt da auch irgendwelche trickreiche Möglichkeiten mit ANT.

Ok noch ne andere Frage, die eigentlich auch zum Thema bisschen gehört: Wenn ich z.B. Konfigurationsdateien aus meiner JAR-Datei laden will, dann muss ich das ja anders machen als normal (also über den Classpath irgendwie). Wie macht ihr das dann eigentlich... sobald ihr euer JAR-File gebaut habt, ändert ihr eure Ladebfehle dann um, so dass die Sachen korrekt aus dem JAR geladen werden, oder gibts da noch bessere Möglichkeiten?
 

sparrow

Top Contributor
Gast hat gesagt.:
Ah verdammt... sry... ich kannte den einen Beitrag in der FAQ wo es eben allgemein ums JAR-File bauen geht, aber ich hab den anderen, wo es um die Verschachtelung geht erst jetzt gesehen. Danke schön.
Aber wenn ich das jetzt richtig gelesen habe, dann kann ich ja die Lösung mit meinem Ant-Script eigentlich vergessen oder? Das muss man dann ja nachträglich von Hand machen, es sei denn es gibt da auch irgendwelche trickreiche Möglichkeiten mit ANT.

Das geht auch mit Ant.
Du musst ja eh verschiedene "Targets" definieren. Bei mir sieht der Vorgang meist so aus:

[Clean (Aufräumen)]
* Compile (Kompilieren des Codes)
* -> Ausführen (falls gewüscht) die Libs werden über den Classpath eingebunden. Ansonsten:
* Libs in ein temporäres Verzeichnis entpacken
* Klassen dazu kopieren
* Temporäres Verzeichis als .jar-Packen
* [Clean (Aufräumen)]



Alles was du zur Laufzeit aus dem Jar holen willst, also auch Grafiken, lädst du mit
Code:
this.getClass().getResourceAsStream(String /pfad/im/ClassPath);

Damit nutzt du die Möglichkeiten des Classloaders .jar-Dateien zu entpacken.
Wenn du danach hier im Forum suchst findest du schnell Antworten darauf wie das funktioniert.


Gruß
Sparrow
 
A

Arki

Gast
Hi,
danke für deine Antwort.
Es ging mir aber eigentlich weniger darum wie man nun solche Dateien aus einem JAR lädt (hatte ich zwar nicht mehr auswendig im Kopf, aber das wäre kein Problem), sondern es ging mir vielmehr darum wie ihr das in der Entwicklung handhabt. Weil wenn man eine Datei aus einem JAR lädt, dann sieht der Befehl dafür ja ganz anders aus wie wenn ich eine Datei "normal" von der Festplatte lade. Ich wollte halt wissen, ob ihr dann, wenn ihr ein JAR baut, alle normalen Lade-Befehle durch solche ersetzt, womit man dann die Sachen aus nem JAR laden kann, oder obs da evtl. noch bessere (fehlerunbehaftetere) Möglichkeiten gibt?
 

Tobias

Top Contributor
@sparrow ( - Captain Sparrow! (?)): ImageIcon nimmt keinen InputStream als Konstruktorparameter - nutzt man dann ClassLOader.getResource(String) und übergibt die URL oder kriege ich so Probleme?

mpG
Tobias
 

sparrow

Top Contributor
Arki hat gesagt.:
Es ging mir aber eigentlich weniger darum wie man nun solche Dateien aus einem JAR lädt (hatte ich zwar nicht mehr auswendig im Kopf, aber das wäre kein Problem), sondern es ging mir vielmehr darum wie ihr das in der Entwicklung handhabt. Weil wenn man eine Datei aus einem JAR lädt, dann sieht der Befehl dafür ja ganz anders aus wie wenn ich eine Datei "normal" von der Festplatte lade. Ich wollte halt wissen, ob ihr dann, wenn ihr ein JAR baut, alle normalen Lade-Befehle durch solche ersetzt, womit man dann die Sachen aus nem JAR laden kann, oder obs da evtl. noch bessere (fehlerunbehaftetere) Möglichkeiten gibt?

Mit den Class.getResource() bzw Class.getResourceAsStream() kannst du die Daten auch laden wenn es noch kein .jar ist. Es kommt halt darauf an was du machst. Wenn du eine Datei wirklich ins .jar mit hinein packst ist das eine sogenannte "Resource". Das werden aber weniger Konfig-Dateien sondern eher Bilder und ähnliches sein.



Tobias hat gesagt.:
@sparrow ( - Captain Sparrow! (?)): ImageIcon nimmt keinen InputStream als Konstruktorparameter - nutzt man dann ClassLOader.getResource(String) und übergibt die URL oder kriege ich so Probleme?
Alles richtig :)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Programmvorstellung & Frage zum Thema Geschäftsform Allgemeine Java-Themen 51
D Thema: Vererbung Ober-/Unterklassen Allgemeine Java-Themen 16
H Kennt sich jemand mit Eclipse und dem Thema Jar-File aus ? Allgemeine Java-Themen 6
L thema gelöscht Allgemeine Java-Themen 0
T Fragen zum Thread-Thema Allgemeine Java-Themen 4
T Fragen zum Thread-Thema Allgemeine Java-Themen 9
P Javac ein wirklich nerviges Thema Allgemeine Java-Themen 10
M Suche Java-Projekt zum Thema Elektrotechnik Allgemeine Java-Themen 6
reibi Workspace schon geöffnet (Kein Eclipse Thema) Allgemeine Java-Themen 14
O Feeds zum Thema Java Allgemeine Java-Themen 10
ARadauer allgemeines zum thema java security Allgemeine Java-Themen 5
D Leidiges Thema MVC *g* Allgemeine Java-Themen 2
K Frage zum thema Java und Internet Allgemeine Java-Themen 49
O Fehler in Listing aus Buch ? Thema: Threads und Threadpool Allgemeine Java-Themen 8
G Links zum Thema Synchronisation Allgemeine Java-Themen 7
M -->: Seite war mit Virus infiziert, daher neues Thema . Allgemeine Java-Themen 3
P Das leidige Thema: Referenzen Allgemeine Java-Themen 2
Chucky Facharbeit Informatik - Thema? Allgemeine Java-Themen 4
D Gehts praktischer? Thema:Verschiedene Instanzen einer Klasse Allgemeine Java-Themen 3
G geeignetes Thema für Kurzreferat? Allgemeine Java-Themen 3
F Frage zum Thema Reflection Allgemeine Java-Themen 13
P DA Thema ??? Allgemeine Java-Themen 2
OnDemand PDF Erstellung / Reports Framework Allgemeine Java-Themen 3
Muatasem Hammud Erstellung von Testdaten für Arrays Allgemeine Java-Themen 6
D UML Erstellung Allgemeine Java-Themen 6
H Hilfe bei Erstellung eines Hilfe Fenster bei Tastendruck (F1 bei Win98) Allgemeine Java-Themen 5
O Datentypen Erstellung eines Containers, der verschachtelte Map-Strukturen beherbergen kann Allgemeine Java-Themen 0
A Vererbung Übungsaufgabe Vererbung - Erstellung Klassenhierarchie Allgemeine Java-Themen 1
maestr0 Programmatische Java Projekt Erstellung Allgemeine Java-Themen 2
C Umlautdarstellung nach Jar-Erstellung Allgemeine Java-Themen 4
D Frage bzgl. Erstellung eines Datenmodells Allgemeine Java-Themen 5
A Salt Erstellung verbessern Allgemeine Java-Themen 7
M GUI - Erstellung Allgemeine Java-Themen 21
S Erstellung einer verschlüsselten Passwort Datei Allgemeine Java-Themen 11
Semox Unterschied bei Thread Erstellung Allgemeine Java-Themen 11
J Progress Bar während Datenbank Erstellung Allgemeine Java-Themen 2
A Dynamische PDF Erstellung mit iText Allgemeine Java-Themen 4
G Problem bei jar erstellung Allgemeine Java-Themen 4
D erstellung einer seitenlangen xml durch ireport Allgemeine Java-Themen 3
A Problem mit der jar-Erstellung Allgemeine Java-Themen 5
@ [RegExp] Probleme bei Erstellung des Ausdrucks Allgemeine Java-Themen 3
C ApplicationContext blockiert bei der Erstellung Allgemeine Java-Themen 2
S PDF Erstellung mit zusätzlichen Headerinformationen Allgemeine Java-Themen 2
G Object erstellung und initialisierung. Allgemeine Java-Themen 4
G Objekt Erstellung in run() von Threads/Runnables Allgemeine Java-Themen 3
G Brauche Hilfe bei Erstellung eines Musters! Allgemeine Java-Themen 3
Oneixee5 Oracle, wieder mal ... Allgemeine Java-Themen 12
E Objekte in einen String packen und wieder laden Allgemeine Java-Themen 5
LimDul Kam eine java.net.URL zu einer HashMap und ging als DNS Anfrage wieder heraus Allgemeine Java-Themen 18
W Vererbung Generics - mal wieder die verhaßte Rückwärtskompatibilität Allgemeine Java-Themen 2
V Scheinbar zufällig hin und wieder: Can't create an ImageOutputStream! Allgemeine Java-Themen 8
J Variablen Mehrere int-variablen in txt abspeichern und danach wieder auslesen Allgemeine Java-Themen 1
X NetBeans Bilder und andere Dateien ins .jar schreiben und wieder aus .jar lesen Allgemeine Java-Themen 6
2 String Array in Datei schreiben und wieder davon lesen Allgemeine Java-Themen 2
F JLabel nach 5 Sekunden wieder leeren Allgemeine Java-Themen 7
Thallius Dateien Zippen und wieder heraus lesen? Allgemeine Java-Themen 4
S Zahlen aus (String mit zahlen) immer wieder neu auslesen Allgemeine Java-Themen 5
OnDemand Input/Output Variablen in Datei Speichern um sie wieder auszulesen Allgemeine Java-Themen 4
iB0T "goto" Befehl aus Batch in Java und Variablen wert immer wieder neu setzen Allgemeine Java-Themen 4
M Regex... mal wieder Allgemeine Java-Themen 3
M CapsLock abfragen wenn Fenster wieder aktiviert wird Allgemeine Java-Themen 5
B Mal wieder "Could not find the main class" Allgemeine Java-Themen 3
C Datentypen int in bytes zerlegen und wieder zusammen setzen Allgemeine Java-Themen 13
S Strings gehen "kaputt" wenn ich in CVS ein und wieder auschecke. Allgemeine Java-Themen 2
F Wieder mal die eBay API Allgemeine Java-Themen 3
E Speicherverwaltung bzw. Speicher wieder frei geben?! Allgemeine Java-Themen 8
T JConsole: Klassen werden geladen aber nicht wieder entladen Allgemeine Java-Themen 3
S Thread vorübergehend stilllegen und wieder aufwecken Allgemeine Java-Themen 18
data89 A-Stern: fährt immer wieder vor die Wand! - Hilfeeee Allgemeine Java-Themen 7
L Thread kurz unterbrechen und wieder starten Allgemeine Java-Themen 5
L Applet immer wieder neu laden - Problem Allgemeine Java-Themen 25
T RegEx, wieder einmal ... :-( Allgemeine Java-Themen 19
S Wieso stehen in der API immer wieder abstrakte Methoden ? Allgemeine Java-Themen 7
C Aus XML ein DOM Objekt und wieder zurück Allgemeine Java-Themen 2
M wieder mal applet probleme Allgemeine Java-Themen 17
A HTML-Seite wieder schließen Allgemeine Java-Themen 2
W Wieder einmal: PNG ausdrucken Allgemeine Java-Themen 3
S GUI komplett schließen und wieder Neu laden? Allgemeine Java-Themen 4
C Bild in .txt speichern und wieder als Bild speichern Allgemeine Java-Themen 2
Y Mal wieder vergleichen von Strings.[Leider noch ein Problem] Allgemeine Java-Themen 18
A String in umgekehrter reihenfolgen wieder geben Allgemeine Java-Themen 16
GilbertGrape mal wieder ne Regex-Frage Allgemeine Java-Themen 2
A Javakonsolenfenster geht gleich wieder zu Allgemeine Java-Themen 6
G Schon wieder Regex Problem :-/ Allgemeine Java-Themen 6
M Variablen Speicher wieder freigeben ? Allgemeine Java-Themen 9
L Werte in externer Datei speichern und wieder auslesen? Allgemeine Java-Themen 8
M Programm schließen und wieder neu starten Allgemeine Java-Themen 9
E Wieder mal der Classloader Allgemeine Java-Themen 6
J Nicht schießen - schon wieder OpenOffice. Allgemeine Java-Themen 4
R Immer wieder NullPointerException Allgemeine Java-Themen 2
L JVM: Speicher wieder für OS freigeben? Allgemeine Java-Themen 5
I Aus Exception wieder zurück Allgemeine Java-Themen 5
J Thread beenden und wieder starten? Allgemeine Java-Themen 20
M Array in eine Datei Schreiben und wieder auslesen Allgemeine Java-Themen 10
S Job immer wieder ausführen Allgemeine Java-Themen 4
N Mal wieder char-encoding Probleme Allgemeine Java-Themen 5
P Filechooser öffnet sich immer wieder neu Allgemeine Java-Themen 4
L Speicherplatz eies RIESEN objektes direkt wieder freigeben Allgemeine Java-Themen 5
V Irgendwie benutzt er wieder Java 1.4 Allgemeine Java-Themen 7
G Array/String aus Request wieder in Array konvertieren Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben