ausführbares JAR-Archiv/Java-Prog erstellen etc.
#1 ausführbares JAR-Archiv/Java-Prog erstellen etc.
Hi,
mal ne Frage an die Java-Profis hier.
Und zwar habe ich ein Java-Programm gebaut und die Dateien bereits in ein jar-Archiv gepackt. Inzwischen habe ich es auch hinbekommen, daß das Programm auch ausgeführt wird - mit der Angabe des Einstiegspunktes.
Ich greife mit dem Programm auf eine MS-SQL Datenbank zu. Die Treiber-Klassen dafür liegen in einem ganz anderen Pfad, den ich aber eigentlich im Classpath zu stehen habe.
Jetzt führt er mir zwar das Programm aus, aber er findet die Treiber-Klassen nicht.
Wo muß das Zeug liegen, damit es auch gefunden wird ? Ich kann doch wohl kaum externe Treiber mit in das jar-Archiv reinstecken. Wenn der jenige, der das Programm ausführen will, ne andere MS-SQL Version hat (z.B. 2003 oder 2000), dann funktionieren die ja eventuell nicht damit - ich verwende 2008 mit den 2005er Treibern. Für die 2003er Variante oder so gibt es ja sicherlich ganz andere Treiber, die eben diese MS-SQL Versionen unterstützen.
Die Klassenstruktur ist folgende:
Projekt/Database/DBZugriffe.class
Projekt/GUI/GUISachen.class
Im Verzeichnis Projekt habe ich das Archiv Projekt.jar erstellt und es wird auch ausgeführt - aber eben beim Datenbankzugriff kommt die Meldung "Driver com.microsoft.sqlserver.jdbc.SQLServerDriver" nicht gefunden - also ne ClassNotFound Exception.
Ich hab das Erstellen per Hand gemacht - da kann ich das Programm auch ausführen. Außerdem hab ich es auch mal Eclipse versuchen lassen. Das hat aber anscheinend diese Treiber-Klassen mit reingesteckt. Allerdings konnte ich das Prog trotzdem nicht auführen, obwohl ich die Option "Executable Jar-Archiv" gewählt hatte.
MFG,
speedy
mal ne Frage an die Java-Profis hier.
Und zwar habe ich ein Java-Programm gebaut und die Dateien bereits in ein jar-Archiv gepackt. Inzwischen habe ich es auch hinbekommen, daß das Programm auch ausgeführt wird - mit der Angabe des Einstiegspunktes.
Ich greife mit dem Programm auf eine MS-SQL Datenbank zu. Die Treiber-Klassen dafür liegen in einem ganz anderen Pfad, den ich aber eigentlich im Classpath zu stehen habe.
Jetzt führt er mir zwar das Programm aus, aber er findet die Treiber-Klassen nicht.
Wo muß das Zeug liegen, damit es auch gefunden wird ? Ich kann doch wohl kaum externe Treiber mit in das jar-Archiv reinstecken. Wenn der jenige, der das Programm ausführen will, ne andere MS-SQL Version hat (z.B. 2003 oder 2000), dann funktionieren die ja eventuell nicht damit - ich verwende 2008 mit den 2005er Treibern. Für die 2003er Variante oder so gibt es ja sicherlich ganz andere Treiber, die eben diese MS-SQL Versionen unterstützen.
Die Klassenstruktur ist folgende:
Projekt/Database/DBZugriffe.class
Projekt/GUI/GUISachen.class
Im Verzeichnis Projekt habe ich das Archiv Projekt.jar erstellt und es wird auch ausgeführt - aber eben beim Datenbankzugriff kommt die Meldung "Driver com.microsoft.sqlserver.jdbc.SQLServerDriver" nicht gefunden - also ne ClassNotFound Exception.
Ich hab das Erstellen per Hand gemacht - da kann ich das Programm auch ausführen. Außerdem hab ich es auch mal Eclipse versuchen lassen. Das hat aber anscheinend diese Treiber-Klassen mit reingesteckt. Allerdings konnte ich das Prog trotzdem nicht auführen, obwohl ich die Option "Executable Jar-Archiv" gewählt hatte.
MFG,
speedy
#2 Re: ausführbares JAR-Archiv/Java-Prog erstellen etc.
Moin,
also zuerst mal

Der Schlüssel zu "ausführbaren" JAR-Dateien liegt in der Datei META-INF/MANIFEST. Hier kann man sowohl den Namen der Startklasse als auch ggf. notwendige weitere Pfade für den Classpath angeben. Also z.B. so, um den Treiber mit aufzunehmen:
Die Datei mit dem Treiber muss dann "neben" der Datei liegen um gefunden zu werden. Alternativ kann man statt
aufrufen, z.B. aus einer Batch-/Skript-Datei. Oder den Treiber ins lib/ext-Verzeichnis des JREs legen, dann ist er automatisch im Classpath.
Wenn es inkl. DB-Treiber (und ggf. weiteren Bibliotheken) eine einzige JAR-Datei werden soll, wirds komplizierter, dann musste den Treiber als Ressource einpacken, zur Laufzeit auspacken und über einen eigenen Classloader nachladen. Ist jetzt aber auf die Schnelle kompliziert zu erklären.
Gruß
Sascha
also zuerst mal
Paketnamen bitte klein schreiben, das schmerzt ja in den Augenspeedy hat geschrieben:Projekt/Database/DBZugriffe.class
Projekt/GUI/GUISachen.class
Der Schlüssel zu "ausführbaren" JAR-Dateien liegt in der Datei META-INF/MANIFEST. Hier kann man sowohl den Namen der Startklasse als auch ggf. notwendige weitere Pfade für den Classpath angeben. Also z.B. so, um den Treiber mit aufzunehmen:
Code: Alles auswählen
Class-Path: driver.jarCode: Alles auswählen
java -jar app.jar Code: Alles auswählen
java -classpath .../treiber.jar -jar app.jar Wenn es inkl. DB-Treiber (und ggf. weiteren Bibliotheken) eine einzige JAR-Datei werden soll, wirds komplizierter, dann musste den Treiber als Ressource einpacken, zur Laufzeit auspacken und über einen eigenen Classloader nachladen. Ist jetzt aber auf die Schnelle kompliziert zu erklären.
Gruß
Sascha
- robbe Moskito Basic/Sport
- Align T-Rex 250, 450SE 3Digi-FBL, 500 CF-FBL
- Outrage Fusion 50 FBL
- Parkzone Corsair, HK EuroFighter 2000 RIP Resurrected
#3 Re: ausführbares JAR-Archiv/Java-Prog erstellen etc.
Hmm,
also in meinem Mainfest steht grad jenes drin:
Manifest-Version: 1.0
Created-By: 1.6.0_11 (Sun Microsystems Inc.)
Main-Class: GUI.DBEditorFrame
Das stimmt so auch.
Und wie bekomme ich da jetzt weitere Sachen rein ? Ich hatte da so Sachen mit einer "Manifest.text" gefunden, aber die wollten bei mir irgendwie nicht gelingen
Hab übrigens Java 6
Das jar-Archiv vom Treiber inkl. Unterverzeichnisse hab ich schon im gleichen Verzeichnis wie das jar, allerdings nicht im Class-Path - das nur für eine andere Stelle.
MFG,
speedy
also in meinem Mainfest steht grad jenes drin:
Manifest-Version: 1.0
Created-By: 1.6.0_11 (Sun Microsystems Inc.)
Main-Class: GUI.DBEditorFrame
Das stimmt so auch.
Und wie bekomme ich da jetzt weitere Sachen rein ? Ich hatte da so Sachen mit einer "Manifest.text" gefunden, aber die wollten bei mir irgendwie nicht gelingen
Hab übrigens Java 6
Das jar-Archiv vom Treiber inkl. Unterverzeichnisse hab ich schon im gleichen Verzeichnis wie das jar, allerdings nicht im Class-Path - das nur für eine andere Stelle.
MFG,
speedy
#4 Re: ausführbares JAR-Archiv/Java-Prog erstellen etc.
Java 6 ist egal, das Format und das Verhalten haben sich nicht geändert. Der Link war der erste, den Google ausgespuckt hat 
Wenn Du es von Hand erstellst, so:
Wenn es die IDE (Eclipse) macht, kann ich leider nicht helfen. Eclipse kenn ich nicht - ist ein einziger Alptraum
.
Gruß
Sascha
Wenn Du es von Hand erstellst, so:
Code: Alles auswählen
Manifest-Version: 1.0
Created-By: 1.6.0_11 (Sun Microsystems Inc.)
Main-Class: GUI.DBEditorFrame
Class-Path: driver.jarGruß
Sascha
- robbe Moskito Basic/Sport
- Align T-Rex 250, 450SE 3Digi-FBL, 500 CF-FBL
- Outrage Fusion 50 FBL
- Parkzone Corsair, HK EuroFighter 2000 RIP Resurrected
#5 Re: ausführbares JAR-Archiv/Java-Prog erstellen etc.
Also ich hab jetzt das:
in ne txt geschrieben und dann jenes aufgerufen:
jar cmf DBEditor.jar ms-sql_manifest.txt
sagt mir: java.io.IOException: invalid header field
Der Rest ist in dem jar-File schon drin. Die Treiber-Datei liegt im gleichen Verzeichnis.
MFG,
speedy
Code: Alles auswählen
Manifest-Version: 1.0
Created-By: 1.6.0_11 (Sun Microsystems Inc.)
Main-Class: GUI.DBEditorFrame
Class-Path: sqljdbc.jar
jar cmf DBEditor.jar ms-sql_manifest.txt
sagt mir: java.io.IOException: invalid header field
Der Rest ist in dem jar-File schon drin. Die Treiber-Datei liegt im gleichen Verzeichnis.
MFG,
speedy
#6 Re: ausführbares JAR-Archiv/Java-Prog erstellen etc.
Und wenn ich die DBEditor.jar lösche, um nochmal alles von vorn zu machen und sage:
jar cmfv DBEditor.jar manifest.txt *
Dann sagt er mir:
java.io.FileNotFoundException: DBEditor.jar (Das System kann die angegebene Datei nicht finden)
Ist doch logisch, die soll er doch auch bauen ?
MFG,
speedy
jar cmfv DBEditor.jar manifest.txt *
Dann sagt er mir:
java.io.FileNotFoundException: DBEditor.jar (Das System kann die angegebene Datei nicht finden)
Ist doch logisch, die soll er doch auch bauen ?
MFG,
speedy
#7 Re: ausführbares JAR-Archiv/Java-Prog erstellen etc.
Ich muss gestehen, ich habe das schon seit Jahren nicht mehr von Hand aufgerufen...
Aber das hier ist der Knackpunkt:
jar cfmv DBEditor.jar manifest.txt *
heißen
bzw.
jar umfv DBEditor.jar manifest.txt
um das Archiv upzudaten.
Gruß
Sascha
Aber das hier ist der Knackpunkt:
Muss alsoJAR-Hilfe hat geschrieben:Der Name der Manifest-Datei, der Name der Archivdatei und der Name des Einstiegspunkts werden
in derselben Reihenfolge wie die Flags 'm', 'f' und 'e' angegeben.
jar cfmv DBEditor.jar manifest.txt *
heißen
bzw.
jar umfv DBEditor.jar manifest.txt
um das Archiv upzudaten.
Gruß
Sascha
- robbe Moskito Basic/Sport
- Align T-Rex 250, 450SE 3Digi-FBL, 500 CF-FBL
- Outrage Fusion 50 FBL
- Parkzone Corsair, HK EuroFighter 2000 RIP Resurrected
#8 Re: ausführbares JAR-Archiv/Java-Prog erstellen etc.
Hmm, jetzt hab ich also jenes mal gemacht:
jar cfmv DBEditor.jar manifest Data\* Database\* GUI\*
Um die Treiber auch schonmal mit in das Projekt-Verzeichnis zu packen.
Aber jetzt baut er mir zwar endlich aus der manifest-Datei auch das Main-Class: GUI.DBEditorFrame mit ein, aber den anderen Class-Path übernimmt er nicht.
MFG,
speedy
jar cfmv DBEditor.jar manifest Data\* Database\* GUI\*
Um die Treiber auch schonmal mit in das Projekt-Verzeichnis zu packen.
Aber jetzt baut er mir zwar endlich aus der manifest-Datei auch das Main-Class: GUI.DBEditorFrame mit ein, aber den anderen Class-Path übernimmt er nicht.
Und wie dann ?duke08 hat geschrieben:ich habe das schon seit Jahren nicht mehr von Hand aufgerufen
MFG,
speedy
#9 Re: ausführbares JAR-Archiv/Java-Prog erstellen etc.
Ist der Eintrag nicht in der Datei oder tuts einfach nicht? Wenn es nur nicht tut, ist das klar, weil wie gesagt, den Treiber mit einpacken geht so ohne weiteres nicht. Der muss im Dateisystem neben der JAR-Datei liegen.speedy hat geschrieben:Um die Treiber auch schonmal mit in das Projekt-Verzeichnis zu packen.
Aber jetzt baut er mir zwar endlich aus der manifest-Datei auch das Main-Class: GUI.DBEditorFrame mit ein, aber den anderen Class-Path übernimmt er nicht.
Aus der IDE oder mit http://ant.apache.org/speedy hat geschrieben:Und wie dann ?
Gruß
Sascha
- robbe Moskito Basic/Sport
- Align T-Rex 250, 450SE 3Digi-FBL, 500 CF-FBL
- Outrage Fusion 50 FBL
- Parkzone Corsair, HK EuroFighter 2000 RIP Resurrected
#10 Re: ausführbares JAR-Archiv/Java-Prog erstellen etc.
Der Eintrag ist nicht drin.duke08 hat geschrieben:Ist der Eintrag nicht in der Datei oder tuts einfach nicht?
Aber jetzt hab ichs - kann es sein, daß man den Eintrag mit nem Zeilenumbruch abschließen muß ? - jedenfalls hat er es jetzt mit übernommen. Und die DB Anbindung funktioniert auch.
MFG,
speedy
#11 Re: ausführbares JAR-Archiv/Java-Prog erstellen etc.
Ja, die letzte Zeile braucht einen Umbruch.speedy hat geschrieben:kann es sein, daß man den Eintrag mit nem Zeilenumbruch abschließen muß ?
Schön, dass es jetzt funktioniert...
Gruß
Sascha
- robbe Moskito Basic/Sport
- Align T-Rex 250, 450SE 3Digi-FBL, 500 CF-FBL
- Outrage Fusion 50 FBL
- Parkzone Corsair, HK EuroFighter 2000 RIP Resurrected
#12 Re: ausführbares JAR-Archiv/Java-Prog erstellen etc.
Hmm, dachte immer, das ist nur für "Web-Sachen" gedacht und nicht für "normale" Programme ?duke08 hat geschrieben:oder mit http://ant.apache.org/
MFG,
speedy
#13 Re: ausführbares JAR-Archiv/Java-Prog erstellen etc.
Nö, absolut nicht. Das ist quasi das Make für Java.
Gruß
Sascha
Gruß
Sascha
- robbe Moskito Basic/Sport
- Align T-Rex 250, 450SE 3Digi-FBL, 500 CF-FBL
- Outrage Fusion 50 FBL
- Parkzone Corsair, HK EuroFighter 2000 RIP Resurrected
