2 votes

exécuter java à partir du terminal qui dépend de bibliothèques externes

J'ai beaucoup lu mais je n'ai pas encore trouvé de solution.

J'utilise lwjgl il a besoin de 2 jars et d'une bibliothèque native pour fonctionner : lwjgl.jar , lwjgl_util.jar et la bibliothèque des indigènes. J'ai essayé de toutes les manières possibles et imaginables, en tout cas, j'essaie avec une commande comme celle-ci pour le moment :

java - Djava.library.path="libs/natives/" -cp libs/jars/lwjgl.jar:libs/jars/lwjgl_util.jar DisplayTest.class

mais à chaque fois que j'essaye, je me fais avoir :

Exception in thread "main" java.lang.NoClassDefFoundError: DisplayTest/class
Caused by: java.lang.ClassNotFoundException: DisplayTest.class
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:321)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: DisplayTest.class. Program will exit

Oh et il pourrait être utile de mentionner que je travaille sur un terminal linux. De plus, j'ai réussi à le faire fonctionner parfaitement dans Eclipse, donc je ne comprends pas vraiment ce qui se passe ici.

4voto

Robson França Points 453

Tout d'abord, il suffit de passer le nom de la classe à java :

java -Djava.library.path="libs/natives/" 
     -cp libs/jars/lwjgl.jar:libs/jars/lwjgl_util.jar DisplayTest

(sauts de ligne pour plus de lisibilité)

J'essaierais ce qui suit :

1) Utilisez la variable d'environnement CLASSPATH, comme dans :

  CLASSPATH=.:/path/to/lwjgl/lwjgl.jar:/path/to/lwjgl/lwjgl_util.jar 
  export CLASSPATH

Remarquez le point (.) au tout début du classpath ;

2) Exécutez votre application java :

  java -Djava.library.path="libs/natives" DisplayTest

Si cela fonctionne, ajoutez les commandes ci-dessus à un shell script. Bonne chance !

1voto

Chris B Points 885

Essayez d'enlever le ".class", par exemple.

java -Djava.library.path="libs/natives/" -cp libs/jars/lwjgl.jar:libs/jars/lwjgl_util.jar DisplayTest.class

Deviendrait :

java -Djava.library.path="libs/natives/" -cp libs/jars/lwjgl.jar:libs/jars/lwjgl_util.jar DisplayTest

En ajoutant le ".class", vous indiquez à la commande que vous avez une classe appelée "class" dans un répertoire appelé "DisplayTest", ce qui n'est pas ce que vous essayez de faire. Ceci est illustré par cette ligne :

Exception in thread "main" java.lang.NoClassDefFoundError: DisplayTest/class

0voto

Chris Points 3010

Lorsque vous déclenchez la commande java, utilisez -cp ou -classpath. Entrez seulement java pour voir l'utilisation

0voto

GiriB Points 1044

J'ai également obtenu une erreur similaire.

Il suffit d'inclure votre répertoire de travail , (où vous avez votre propre classe), ainsi que les bibliothèques dont vous avez besoin dans votre classpath au moment de l'exécution.

NoCLassDefFoundError se produit lorsque l'appareil ne parvient pas à trouver votre .class pendant l'exécution (même s'ils ont été compilés, c'est-à-dire qu'il ne donnera pas d'erreur pendant la compilation mais seulement pendant l'exécution).

ETAPE 1 : pour compiler javac -classpath "path/to/lib1:path/to/lib2" votrefichier.java ÉTAPE 2 : pour exécuter java - classpath "path/to/lib1:path/to/lib2:path/to/your/currentdirectory/wherethedotclass/filearecreated/" yourfile

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X