java.lang.ClassNotFoundException lors de l'exécution de java-jar

Je suis en utilisant ant pour construire mon build.xml fichier, il compile ok, mais alors l'obtention d'un runtime java.lang.NoClassDefFoundError lors de l'exécution de l'résultant jar via "java -jar my_jar.jar". Il semble que cela vient d'un lot, mais aucune des questions liées à des "solutions" a fonctionné pour moi.

Mon classpath pour javac ne contient que des "/usr/local/lib/libthrift.jar" et le principal .java importation de fichiers un tas de l'épargne des logiciels tels que org.apache.thrift.transport.TTransportException.

Lorsque j'essaie d'exécuter le programme via:

java -jar MyClass.jar

J'obtiens l'erreur:

Exception in thread "main" **java.lang.NoClassDefFoundError**: org/apache/thrift/transport/TTransportException
Caused by: java.lang.ClassNotFoundException: org.apache.thrift.transport.TTransportException
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
Could not find the main class: **MyClass**. Program will exit.

Ici sont les choses que j'ai essayé jusqu'à présent qui ne fonctionnent pas:

  • l'ajout d'un drapeau sur la ligne de commande comme "java -cp /usr/local/lib/libthrift.jar -jar my_jar.jar", le résultat est le même message d'erreur comme ci-dessus

  • ajoutant <attribute name="Class-Path" value="./:/usr/local/lib/libthrift.jar"/> à l'intérieur de mon pot de manifest> tag, le résultat est le même message d'erreur comme ci-dessus

  • ajoutant -Xbootclasspath/a:/usr/local/lib/libthrift.jar:./ à la ligne de commande java. il résout la première erreur, mais une autre erreur qui apparaît:

    Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Enregistreur
    au org.apache.l'épargne.de transport.TServerSocket.<clinit>(TServerSocket.java:36)
    au MyClass.start(Source Inconnue)
    au MyClass.principale(Source Inconnue)

EDIT:

Si j'en commentaire le code qui instancie les classes manquantes, mais laisser les importations, le code s'exécute bien.

EDIT:

J'ai déménagé mes classes java à un serveur et fait référence à l'MainClass avec le serveur dans le manifeste de l'attribut, mais qui n'a pas de résoudre quoi que ce soit.

Juste ajouté le Chemin de Classe de la section de l'MANIFESTE dans ma réponse. Je viens de voir James B de la réponse, donc si cela fonctionne, vous pouvez sélectionner sa réponse officielle.

OriginalL'auteur Heinrich Schmetterling | 2009-11-25