Java NoClassDefFoundError trotz set classpath

Ich habe einige Schwierigkeiten mit dem Erhalt einer Java-Anwendung ausführen, in der Konsole und/oder mit Ant.
Ich weiß, dass eine Menge von Start-Problemen, der classpath nicht gesetzt oder falsch gesetzt, aber ich bin mir ziemlich sicher, dass ich es korrekt, also meine Suche ergab nur Ergebnisse auf, die.

Hier ist den Allgemeinen Aufbau meiner Anwendung:
Klassen sind in packages model, view und controller. controller.Controller ist die Klasse mit der main-Methode. Ich bin mit objectdb als meine JPA-provider.

Ich bin mit Ant kompilieren meiner Anwendung.

Nach dem kompilieren kann ich meine Anwendung von ant mit dem folgenden Skript:

<target name="run" description="default build process">
    <java fork="true" classname="${main-class}">
        <classpath>
            <path refid="classpath" />
        </classpath>
    </java>
</target>

wobei ${main-class} ist controller.Controller und classpath besteht aus /lib und /dist Ordner (der Anwendung-jar-Datei kompiliert wird /dist)

Nun habe ich versucht, das kopieren alle .jar-Dateien aus /lib und /dist, um einen separaten Ordner und führen Sie Sie mitjava -jar cooking.jar -cp . die Ergebnisse in

Exception in thread "main" java.lang.NoClassDefFoundError: javax/persistence/Persistence
    at model.jpa.JPAModelFactory.<init>(JPAModelFactory.java:28)
    at model.jpa.JPAModelFactory.<init>(JPAModelFactory.java:24)
    at controller.Controller.<init>(Controller.java:59)
    at controller.Controller.main(Controller.java:116)
Caused by: java.lang.ClassNotFoundException: javax.persistence.Persistence
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 4 more

Also habe ich versucht ant und leicht modifiziert, die oben bauen Ziel:

<target name="run2" description="default build process">
    <java fork="true" jar="${dist.dir}/${ant.project.name}.jar">
        <classpath>
            <path refid="classpath" />
        </classpath>
    </java>
</target>

die Ergebnisse in die gleichen Fehler. Ich verstehe nicht, warum.

Nur um es zu testen, ich habe versucht, über die Befehlszeile ausgeführt durch die Angabe der main-Klasse direkt: java -cp . controller.Controller die aus irgendeinem Grund nicht selbst suchen Sie die Klasse (es ist da, ich bestätigte es):

Exception in thread "main" java.lang.NoClassDefFoundError: controller/Controller
Caused by: java.lang.ClassNotFoundException: controller.Controller
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: controller.Controller.  Program will exit.

Ich habe JAVA_HOME auf mein JDK-path und CLASSPATH zu meiner JRE s/lib-Pfad.
OS ist Windows 7 64 bit, Java version 1.6.0_25-b06

Ich staune über zwei Dinge:
a) Warum ist Java nicht finden-controller.Controller, obwohl es vorhanden ist .jar-Datei und der .jar-Datei in das aktuelle Verzeichnis ist?
b) Was mache ich falsch, dass der Aufruf mit Java -jar scheint in Unordnung zu bringen, die lookup-Mechanismen.

Jede Hilfe wird sehr geschätzt.

  • Was sehen Sie in Ihrem Manifest.MF Datei den class-path und Main-class-Eintrag?
  • Manifest-Version: 1.0 Ant-Version: Apache Ant 1.7.1 Erstellt Von: 20.0-b11 (Sun Microsystems, Inc.) Main-Klasse: - controller.Controller
InformationsquelleAutor Tobias | 2011-05-28
Schreibe einen Kommentar