# java.lang.NoClassDefFoundError  -- was kann ich tun?



## vodn7v (14. Jul 2009)

Hallo,
eigentlich ein echt simpler Fehler. Das System kann die angegebene Klasse nicht finden. Aber ich verstehe absolut nicht warum. Der Pfad scheint richtig zu sein, dennoch bekomme ich diesen Fehler.
Ich versuche über eine *.sh datei meine anwendung zu starten.

Hier der inhalt der startdatei:
#!/bin/sh
java -Xms32m -Xmx384m -cp ./lib/activation.jar:./lib/mail.jar:./lib/bcprov-jdk14-125.jar:./lib/bcmail-jdk14-125.jar org.openas2.app.OpenAS2Server ./config/config.xml


derFehler:
Exception in thread "main" java.lang.NoClassDefFoundError: org/openas2/app/OpenAS2Server
Caused by: java.lang.ClassNotFoundException: org.openas2.app.OpenAS2Server
	at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:323)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:268)
	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:336)
Could not find the main class: org.openas2.app.OpenAS2Server. Program will exit.

und das ist der Pfad der Klasse:
/opt/openAS2/bin/org/openas2/app/OpenAS2Server.class

die startdatei liegt in:
/opt/openAS2/startAS2.sh


Ich kann auch keine Schreibfehler entdecken. Wie kann ich am Besten an so ein problem herangehen und nach der Ursache des problems suchen?


Vielen Dank.


----------



## Spacerat (14. Jul 2009)

Genau hinsehen  würd' ich sagen... die Startklasse (sammt Paketpfad) liegt ja auch im "bin"-Verzeichnis. Möglicherweise funktionierts, wenn das Startskript auch dort abgelegt wird. Andererseits: dann stimmen ja die Klassenpfade ("lib") nicht mehr. Ich würde das "bin"-Verzeichnis daher vollkommen vergessen und alles was dort drinnen liegt eine ebene höher ansiedeln.


----------



## vodn7v (14. Jul 2009)

hi, das habe ich auch schon versucht, mit folgender startdatei:
dieses mal im bin ordner:

#!/bin/sh
java -Xms32m -Xmx384m -cp ../lib/activation.jar:../lib/mail.jar:../lib/bcprov-jdk14-125.jar:../lib/bcmail-jdk14-125.jar org.openas2.app.OpenAS2Server ../config/config.xml


leider mit gleichem ergebnis. es ist mir echt ein rätsel warum es nicht funktioniert =)


----------



## Noctarius (14. Jul 2009)

Du sollst eher den bin Ordner dem Classpath hinzufügen


----------



## Spacerat (14. Jul 2009)

... und wie siehts aus, wenn der Klassenpfad noch um ":." (aktuelles Verzeichnis) erweitert wird?
@Noctarius: Uuuumpf... Klar.... wie war das mit dem Wald und den Bäumen? Da schreib' ich X-Zeilen Text für so 'ne einfache Lösung?


----------



## Noctarius (14. Jul 2009)

```
#!/bin/sh
java -Xms32m -Xmx384m -cp bin/:./lib/activation.jar:./lib/mail.jar:./lib/bcprov-jdk14-125.jar:./lib/bcmail-jdk14-125.jar org.openas2.app.OpenAS2Server ./config/config.xml
```


----------



## vodn7v (14. Jul 2009)

hi, hilft leider auch nicht.

Exception in thread "main" java.lang.NoClassDefFoundError: /bin/org/openas2/app/OpenAS2Server


-->

java -Xms32m -Xmx384m -cp ./lib/activation.jar:./lib/mail.jar:./lib/bcprov-jdk14-125.jar:./lib/bcmail-jdk14-125.jar .bin.org.openas2.app.OpenAS2Server ./config/config.xml


das gibts doch gar nicht.


----------



## vodn7v (14. Jul 2009)

sehr cool !!! es geht =)


vielen dank !!

kann mir jemand noch erklären warum man den klassenpfad nicht direkt angeben kann, sondern ganz zu anfang das binverzeichnis angeben muss?

also worin besteht der unterschied ?

danke !!


----------



## Noctarius (14. Jul 2009)

Dass deine Klassen im Bin-Verzeichnis liegen Oo Wenn du eine bin.jar hättest müsstest du das Jar ja auch angeben. Im Classpath ist Jar=Verzeichnis und Verzeichnis=Jar.


----------

