# JAR-Datei funktioniert nicht



## jLn (6. Jun 2007)

Hallo @ all,

ich möchte ein Projekt zu einer Jar-Datei exportieren, was auch ohne Probleme geht, jedoch wenn ich diese ausführe passiert gar nichts und 
wenn ich es auf einem anderen Rechner ausprobiere gibt er eine Fehlermeldung "Could not find the main class. Program will exit." aus!
Jetzt habe ich die Vermutung, dass es daran liegen könnte, weil ich libaries nach installieren musste (z.B. mysqlconnector). 
Könnte es daran liegen, schreibt einfach mal was euch dazu einfällt!


----------



## EOB (6. Jun 2007)

hi, es liegt einfach daran, dass du nicht angegeben hast, welche klasse deine main methode enthält. das wird im so genannten manifest im jar gespeichert. wie hast du die jar erstellt? eclipse?

grüße


----------



## thE_29 (6. Jun 2007)

Ansonsten guck in die FAQ wie man Jar Dateien zusammenbaut!

Kannst ja dein bestehends Jar Archiv ja auch updaten!


----------



## jLn (6. Jun 2007)

also ich habe es mit eClipse erstellt und habe auch die main methode angegeben! ich hab ja schon mehrere Male eine Jar erstellt die funktioniert hat, nur diesmal funktioniert es eben nicht!


----------



## ExZtEd (6. Jun 2007)

Da Du eine externe (nicht der JRE zugehörige Klasse) verwendest, hast DU auch daran gedacht, die benötigten zusätzlichen Klassen mit ins Manifest zu packen, ... Stichwort: Class-Path?


----------



## jLn (7. Jun 2007)

okay dann war meine Vermutung ja richtig, nur heißt das jetzt das ich z.B. die ganze mysqlconnector.jar auspacken und in mein Projekt einfügen muss? Ich benutze eClipse und habe dort ja die Libaries hinzugefügt, damit ich das Projekt auch kompilieren und testen kann. Kann man das nicht bei der Jar-Erstellung definieren, dass der diese Libaries mit in die Jar packt?


----------



## L-ectron-X (7. Jun 2007)

Es genügt, wenn du die mysqlConnector.jar neben deine Projekt-Jar ins Verzeichnis legst und im Class-Path der Manifest-Datei deiner Projekt-Jar aufführst. So kannst du die Jar-Datei später mal bequem austauschen. Ist für meine Begriffe die sauberste, einfachste und flexibelste Lösung.

Für Eclipse gibts glaube ich ein FatJar-Plugin, welches Jar-Archive ineinander verpackt.


----------



## jLn (7. Jun 2007)

Hm ich hab mir mal von dem Projekt die .classpath Datei angeschaut  und bin mir jetzt unsicher ob das so stimmt:


```
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
	<classpathentry kind="src" path=""/>
	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
	<classpathentry kind="lib" path="lib/mysql-connector-java-5.0.6-bin.jar"/>
	<classpathentry kind="lib" path="lib/componentset-all.jar"/>
	<classpathentry kind="output" path=""/>
</classpath>
```

Fehlt da noch was?


----------



## ExZtEd (7. Jun 2007)

Das bezieht sich aber nur auf dein Projekt innerhalb der IDE.

Die beiden
mysql-connector-java-5.0.6-bin.jar
componentset-all.jar
müssen noch in Class-path in deinem Manifest zu finden sein, und einfach die beiden jars dann dazulegen.
Müssen nicht ins JAR gepackt werden.


----------



## jLn (7. Jun 2007)

hm okay das hab ich jetzt so gemacht in meinem verzeichnis sind jetzt folgende dateien: 
- /test.jar
- /lib/mysql-connector-java-5.0.6-bin.jar
- /lib/componentset-all.jar
test.jar ist das ausführbare Programm. Die .classpath Datei in test.jar sieht genau so aus wie ich Sie dort oben geschrieben habe. Was muss ich den jetzt nach eurer Meinung noch ändern um das zum laufen zu bekommen?


----------



## ExZtEd (7. Jun 2007)

Die von dir gepostete Datei beschreibt das Projekt in Deiner IDE nicht im Manifest!

Ein Manifest (Manifest.MF) sieht in etwa so aus, wenn ich Dein Beispiel nehme:


```
Manifest-Version: 1.0
Main-Class: <hier kommt deine Mainklasse mit kompletten Paketnamen hin> bsp: foo.bar.TestMain
Class-Path: lib/mysql-connector-java-5.0.6-bin.jar lib/componentset-all.jar
```

Die .classpath bringt in einer JAr nichts!


----------



## outbreaker (7. Jun 2007)

Ich benutze zum erstellen von Jar Dateien die andere Jar's enthalten sollen das Eclipse-Plugin Fat Jar, mit diesem ist es auf einfach weise möglich andere Jars mit in das Projekt zu packen.


----------



## jLn (7. Jun 2007)

das ist echt zum heulen, ich versteht net was ich falsch mache! Ich habs mal mit FatJar probiert, weil wenn ich eine eigene Manifest.mf datei hinzufüge hat er diese immer doppelt drin. 
In der Jar-Datei sind nun folgende Dateien, vielleicht fällt da jemanden was auf:
- Manifest.mf:

```
Manifest-Version: 1.0
Created-By: Fat Jar Eclipse Plug-In
Main-Class: manifest.Main
Class-Path: lib/mysql-connector-java-5.0.6-bin.jar lib/componentset-all.jar

Name: common
Specification-Title: JDBC
Specification-Version: 3.0
Specification-Vendor: Sun Microsystems Inc.
Implementation-Title: MySQL Connector/J
Implementation-Version: 5.0.6
Implementation-Vendor-Id: com.mysql
Implementation-Vendor: MySQL AB
```

- .fatjar:

```
#Fat Jar Configuration File
#Thu Jun 07 15:54:52 CEST 2007
onejar.license.required=true
manifest.classpath=lib/mysql-connector-java-5.0.6-bin.jar lib/componentset-all.jar
manifest.removesigners=true
onejar.checkbox=false
jarname=Picards Reiseshop_fat.jar
manifest.mergeall=true
manifest.mainclass=manifest.Main
manifest.file=<createnew>
jarname.isextern=false
onejar.expand=
excludes=
includes=
```


----------



## outbreaker (7. Jun 2007)

Hast bei Fat Jar auch ausgewählt das er deine andere Jar mit einpackt?

also befindet sich in deiner Jar ein Ordner lib und in dem sind deine anderen Jars drin die du benutzt?


----------



## outbreaker (7. Jun 2007)

Es gibt bei Fat Jar die Möglichkeit das man One-JAR auswählt erst dann sind deine anderen jars auch richtig verlinkt

ist ein kleinen Feld unten auf der ersten Konfigurationsseite von Fat Jar


----------



## jLn (7. Jun 2007)

super thx jetzt gehts, lag an One-Jar


----------

