2014-07-05 4 views
1
inclus

J'écris une application java et l'exécuter sur un serveur linux EC2. le programme en cours d'exécution a été couramment hier, et après avoir changé et organazied certains fichiers et paquets j'obtiens ce problème quand j'exécute le programme:NoClassDefFoundError pour un pot

Je suis en cours d'exécution du Programme avec cette commande:

java -cp . main.Server 

Et l'erreur suivante:

Exception in thread "Thread-0" java.lang.NoClassDefFoundError: org/json/JSONObject 
    at main.Group.<init>(Group.java:28) 
    at main.Server.run(Server.java:23) 
Caused by: java.lang.ClassNotFoundException: org.json.JSONObject 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
    ... 2 more 

je courais le programm comme cela avant les changements:

export CLASSPATH=$CLASSPATH:/home/ec2-user/java-json.jar 

Dans le dossier bin, commande:

java Server 

Et le Programme était en cours d'exécution. Depuis que j'ai changé le paquet du nom par défaut à main, je dois l'exécuter avec la commande java -cp . main.Server, mais l'erreur est écrite ci-dessus.

J'ai aussi essayé modifing le .bash_profile et ajoutez ceci:

CLASSPATH=$CLASSPATH:/home/ec2-user/java-json.jar 
export CLASSPATH 

Mais il n'a pas aidé. Je n'ai pas d'erreur dans mon code et le pot n'est pas cassé puisqu'il a fonctionné avant. Que dois-je faire pour résoudre ce problème?

Répondre

1

Spécifiez le fichier jar sur le chemin de classe comme ceci:

java -cp .:/home/ec2-user/java-json.jar main.Server 

Si votre classpath est en effet réglé correctement dans votre .bash_profile, vous pouvez aussi le faire:

java -cp .:$CLASSPATH main.Server 
+0

Merci ça marche! Savez-vous un moyen d'inclure le pot sans l'écrire dans la commande à chaque exécution? Éditer: Oui, la deuxième commande fonctionne très bien. Merci! – itaied

+2

Vous pouvez utiliser quelque chose comme [Maven Assembly Plugin] (http://maven.apache.org/plugins/maven-assembly-plugin/) pour construire un exécutable [fichier JAR qui inclut toutes les dépendances] (http: // maven .apache.org/plugins/maven-assemblage-plugin/descriptor-refs.html # jar-avec-dépendances). –