# Eclipse: SWT Projekt in JAR packen



## FlorianK (14. Dez 2006)

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:

```
JAR creation failed. See details for additional information.
```


```
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.
```


----------



## FlorianK (14. Dez 2006)

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?


----------



## byte (14. Dez 2006)

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


----------



## FlorianK (14. Dez 2006)

Vielen Dank für die schnelle Antwort!

Ich habe mir nun eine Batch-Datei geschrieben:

```
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:

```
Exception in thread "main" java.lang.NoClassDefFoundError: org/jdom/Content
```


----------



## byte (14. Dez 2006)

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.


----------



## FlorianK (14. Dez 2006)

Ich habe die Batch-Datei geändern, gleicher Fehler...

In meiner MANIFEST.MF steht folgendes drin:

```
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):

```
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?


----------



## byte (14. Dez 2006)

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.


----------



## SnooP (14. Dez 2006)

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.


----------

