ausführbares JAR-Archiv/Java-Prog erstellen etc.

Antworten
speedy
Beiträge: 9028
Registriert: 22.10.2004 10:45:57
Wohnort: Stuttgart
Kontaktdaten:

#1 ausführbares JAR-Archiv/Java-Prog erstellen etc.

Beitrag von speedy »

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
Benutzeravatar
duke08
Beiträge: 347
Registriert: 07.02.2008 18:39:36
Wohnort: Wendlingen am Neckar

#2 Re: ausführbares JAR-Archiv/Java-Prog erstellen etc.

Beitrag von duke08 »

Moin,

also zuerst mal
speedy hat geschrieben:Projekt/Database/DBZugriffe.class
Projekt/GUI/GUISachen.class
Paketnamen bitte klein schreiben, das schmerzt ja in den Augen ;)

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.jar
Die Datei mit dem Treiber muss dann "neben" der Datei liegen um gefunden zu werden. Alternativ kann man statt

Code: Alles auswählen

java -jar app.jar 

Code: Alles auswählen

java -classpath .../treiber.jar -jar app.jar 
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
  • 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

speedy
Beiträge: 9028
Registriert: 22.10.2004 10:45:57
Wohnort: Stuttgart
Kontaktdaten:

#3 Re: ausführbares JAR-Archiv/Java-Prog erstellen etc.

Beitrag von speedy »

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
Benutzeravatar
duke08
Beiträge: 347
Registriert: 07.02.2008 18:39:36
Wohnort: Wendlingen am Neckar

#4 Re: ausführbares JAR-Archiv/Java-Prog erstellen etc.

Beitrag von duke08 »

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:

Code: Alles auswählen

Manifest-Version: 1.0
Created-By: 1.6.0_11 (Sun Microsystems Inc.)
Main-Class: GUI.DBEditorFrame
Class-Path: driver.jar
Wenn es die IDE (Eclipse) macht, kann ich leider nicht helfen. Eclipse kenn ich nicht - ist ein einziger Alptraum :roll:.

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

speedy
Beiträge: 9028
Registriert: 22.10.2004 10:45:57
Wohnort: Stuttgart
Kontaktdaten:

#5 Re: ausführbares JAR-Archiv/Java-Prog erstellen etc.

Beitrag von speedy »

Also ich hab jetzt das:

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
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
speedy
Beiträge: 9028
Registriert: 22.10.2004 10:45:57
Wohnort: Stuttgart
Kontaktdaten:

#6 Re: ausführbares JAR-Archiv/Java-Prog erstellen etc.

Beitrag von speedy »

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
Benutzeravatar
duke08
Beiträge: 347
Registriert: 07.02.2008 18:39:36
Wohnort: Wendlingen am Neckar

#7 Re: ausführbares JAR-Archiv/Java-Prog erstellen etc.

Beitrag von duke08 »

Ich muss gestehen, ich habe das schon seit Jahren nicht mehr von Hand aufgerufen...

Aber das hier ist der Knackpunkt:
JAR-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.
Muss also

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

speedy
Beiträge: 9028
Registriert: 22.10.2004 10:45:57
Wohnort: Stuttgart
Kontaktdaten:

#8 Re: ausführbares JAR-Archiv/Java-Prog erstellen etc.

Beitrag von speedy »

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. :(
duke08 hat geschrieben:ich habe das schon seit Jahren nicht mehr von Hand aufgerufen
Und wie dann ?


MFG,
speedy
Benutzeravatar
duke08
Beiträge: 347
Registriert: 07.02.2008 18:39:36
Wohnort: Wendlingen am Neckar

#9 Re: ausführbares JAR-Archiv/Java-Prog erstellen etc.

Beitrag von duke08 »

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.
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:Und wie dann ?
Aus der IDE oder mit http://ant.apache.org/

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

speedy
Beiträge: 9028
Registriert: 22.10.2004 10:45:57
Wohnort: Stuttgart
Kontaktdaten:

#10 Re: ausführbares JAR-Archiv/Java-Prog erstellen etc.

Beitrag von speedy »

duke08 hat geschrieben:Ist der Eintrag nicht in der Datei oder tuts einfach nicht?
Der Eintrag ist nicht drin.


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. :D


MFG,
speedy
Benutzeravatar
duke08
Beiträge: 347
Registriert: 07.02.2008 18:39:36
Wohnort: Wendlingen am Neckar

#11 Re: ausführbares JAR-Archiv/Java-Prog erstellen etc.

Beitrag von duke08 »

speedy hat geschrieben:kann es sein, daß man den Eintrag mit nem Zeilenumbruch abschließen muß ?
Ja, die letzte Zeile braucht einen Umbruch.

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

speedy
Beiträge: 9028
Registriert: 22.10.2004 10:45:57
Wohnort: Stuttgart
Kontaktdaten:

#12 Re: ausführbares JAR-Archiv/Java-Prog erstellen etc.

Beitrag von speedy »

duke08 hat geschrieben:oder mit http://ant.apache.org/
Hmm, dachte immer, das ist nur für "Web-Sachen" gedacht und nicht für "normale" Programme ?


MFG,
speedy
Benutzeravatar
duke08
Beiträge: 347
Registriert: 07.02.2008 18:39:36
Wohnort: Wendlingen am Neckar

#13 Re: ausführbares JAR-Archiv/Java-Prog erstellen etc.

Beitrag von duke08 »

Nö, absolut nicht. Das ist quasi das Make für Java.

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

Antworten

Zurück zu „Klönschnack“