Eclipse: SWT Projekt in JAR packen

  • Themenstarter Themenstarter FlorianK
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
F

FlorianK

Gast
Hallo,

ich habe ein SWT-Projekt geschrieben.
Nun möchte ich mein Programm in eine ausführbare JAR-Datei schreiben.
Jedoch funktioniert das nicht reibungslos :/

Ich arbeite mit Eclispe 3.2...
Ich gehe auf "Export" und wähle "JAR-Datei" aus
Im nächsten Schritt wähle ich mein Projekt aus und geb der JAR-Datei einen Namen
Beim nächsten Schritt ändere ich nichts.
Beim letzten Schritt gebe ich den Ort meiner Main-Methode an und klick auf Finish.

Anschließend bekomm ich folgenden Fehler zurück:
Code:
JAR creation failed. See details for additional information.

Code:
Export with compile warnings: [JAVA-Datei]
Export with compile warnings: [JAVA-Datei]
Class file(s) on classpath not found or not accessible [JAVA-Datei]
Export with compile warnings: [JAVA-Datei]
Export with compile warnings: [JAVA-Datei]
Problem writing .classpath to JAR: duplicate entry: .classpath
duplicate entry: .classpath
..... usw.
 
Was ich noch vergessen hatte:

Ich habe noch eine weitere JAR-Datei (jdom.jar) in mein Projekt eingebunden.
Ich habe gelesen, dass es damit Probleme geben kann.
Stimmt das?
 
Du musst Dein Projekt ganz normal in ein Jar exportieren und danach noch den Classpath anpassen. Je nachdem welche SWT-Klassen Du verwendest, benötigst Du noch diverse Jars aus dem Eclipse Plugin Verzeichnis. Im Minimalfall die plattformspezifische swt.jar (also z.B. win32). Darüber hinaus brauchst Du dann noch die nativen Bibliotheken, also für Windows die verschiedenen DLLs.

Du kannst Dir z.B. SWT von www.eclipse.org/swt/ nochmal separat runterladen. Da sind die swt.jar und die DLLs dabei. Dann kannst Du Dir z.B. für den Aufruf Deiner Anwendung eine Batch-Datei schreiben für den Java-Aufruf:

java -cp swt.jar;jdom.jar;... -Djava.library.path=pfad_zu_den_DLLs -jar DeinJar.jar
 
Vielen Dank für die schnelle Antwort!

Ich habe mir nun eine Batch-Datei geschrieben:
Code:
java -cp swt.jar;jdom.jar -Djava.library.path=dlls -jar gvaudit.jar

So liegen meine Dateien
  • GVAudit
    [list:5e391530ec]dlls
    [list:5e391530ec]swt-awt-win32-3235.dll
    swt-gdip-win32-3235.dll
    swt-wgl-win32-3235.dll
    swt-win32-3235.dll
org.eclipse.swt.win32.win32.x86_3.2.1.v3235.jar
jdom.jar
gvaudit.jar
gvaudit.bat[/list:u:5e391530ec][/list:u:5e391530ec]

Bekomme aber nun folgenden Fehler:
Code:
Exception in thread "main" java.lang.NoClassDefFoundError: org/jdom/Content
 
Versuchs so:

java -cp org.eclipse.swt.win32.win32.x86_3.2.1.v3235.jar;jdom.jar -Djava.library.path=dlls -jar gvaudit.jar


Im Manifest Deines Jars muss auch die Main-Klasse richtig angegeben sein. Und je nachdem, was Du alles verwendest vom SWT-Framework, kanns sein, dass Du noch weitere Jars benötigst.
 
Ich habe die Batch-Datei geändern, gleicher Fehler...

In meiner MANIFEST.MF steht folgendes drin:
Code:
Manifest-Version: 1.0
Main-Class: gvaudit.GVAudit
Was auch soweit stimmt, da dass die Datei ist, wo meine Main-Methode drin liegt.

In meinem Projekt include ich folgendes (in unterschiedlichen Dateien):
Code:
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Shell;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
Benötige ich weitere JARs?
Oder sind sie in der SWT.jar enthalten?

Bzw, muss ich die saxpath.jar o.ä. JARs auch angeben?
Oder sind die mit der jdom.jar abgedeckt?
 
Keine Ahnung was saxpath.jar ist, aber wenn Du es verwendest, musst Du es natürlich auch angeben.

Verwendest Du vielleicht noch einen anderen als den Standard JAXP Parser zum einlesen der XML-Daten, also z.B. Xerces? Wenn ja, dann muss der natürlich auch in den Classpath.

Du musst alle externen Jars angeben, die nicht zum JRE gehören.
 
kleiner Tipp - guck dir die jars an und welche Klassen da drin sind... - dann einzeln hinzufügen, bis die Fehlermeldungen halt weggehen 😉 ... kann schonmal länger dauern, wenn man nicht immer weiß, wo was alles enthalten ist.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben