Problème de compilation java
Résolu
katsuo49
Messages postés
330
Date d'inscription
Statut
Membre
Dernière intervention
-
katsuo49 Messages postés 330 Date d'inscription Statut Membre Dernière intervention -
katsuo49 Messages postés 330 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je suis étudiant en info, j'ai bien compris les paquetages et tout en java mais pour un travail à rendre je bute sur un point de compilation.
On me demande de créer une classe Application qui fait appel à des classes répartit sur 2 dossiers qui doivent être placé dans un dossier class. Jusque là je n'ai aucun problème, j'ai créé mon arborescence comme on me le demande et j'ai compilé sans problème en mettant des import des class nécessaire ce qui me donne cette arborescence :
Maintenant si j'exécute mon programme avec java Application il me dit qu'il ne trouve pas ma class main :
Je ne comprend pas cette erreur. Cela fonctionnait sans le moindre problème juste avant que je ne place mes classes dans le dossier class, elle se trouvait juste dans les dossiers employe et personnel à coté de ma classe Application.
Et là je viens de tester à nouveau en remettant comme ça et cela fonctionne, il n'y a que quand je place mes classes dans le dossier class que cela ne fonctionne pas.
J'ai essayé de spécifier la variable $CLASSPATH, d'utiliser l'option -cp de javac aussi mais sans résultat.
Quelqu'un aurait-il une idée ?
Je suis étudiant en info, j'ai bien compris les paquetages et tout en java mais pour un travail à rendre je bute sur un point de compilation.
On me demande de créer une classe Application qui fait appel à des classes répartit sur 2 dossiers qui doivent être placé dans un dossier class. Jusque là je n'ai aucun problème, j'ai créé mon arborescence comme on me le demande et j'ai compilé sans problème en mettant des import des class nécessaire ce qui me donne cette arborescence :
. |--- Application.class |--- class | |--- employe | | |--- Commercial.class | | |--- Employe.class | | |--- Manutentionnaire.class | | |--- Ouvrier.class | | |--- TechnicoCommercial.class | | |--- VRP.class | |--- entree | | |--- Entree.class | |--- liste | | |--- Cellule.class | | |--- Liste.class | |--- personnel | |--- Personnel.class |--- src |--- Application.java |--- class |--- employe | |--- Commercial.class | |--- Employe.class | |--- Manutentionnaire.class | |--- Ouvrier.class | |--- TechnicoCommercial.class | |--- VRP.class |--- entree | |--- Entree.class |--- liste | |--- Cellule.class | |--- Liste.class |--- personnel |--- Personnel.class
Maintenant si j'exécute mon programme avec java Application il me dit qu'il ne trouve pas ma class main :
Exception in thread "main" java.lang.NoClassDefFoundError: Application Caused by: java.lang.ClassNotFoundException: Application 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: Application. Program will exit.
Je ne comprend pas cette erreur. Cela fonctionnait sans le moindre problème juste avant que je ne place mes classes dans le dossier class, elle se trouvait juste dans les dossiers employe et personnel à coté de ma classe Application.
Et là je viens de tester à nouveau en remettant comme ça et cela fonctionne, il n'y a que quand je place mes classes dans le dossier class que cela ne fonctionne pas.
J'ai essayé de spécifier la variable $CLASSPATH, d'utiliser l'option -cp de javac aussi mais sans résultat.
Quelqu'un aurait-il une idée ?
A voir également:
- Problème de compilation java
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick java football - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
2 réponses
Est-ce que tu as des packages dans ta hiérarchie de classe ?
Car normalement tu ne devrais avoir des dossiers distincts que pour des packages de même nom, et si tu as déplacé des classes, tu dois modifier les packages en conséquence.
Car normalement tu ne devrais avoir des dossiers distincts que pour des packages de même nom, et si tu as déplacé des classes, tu dois modifier les packages en conséquence.
Lorsque j'ai déplacé mes dossiers contenants mes classes au début j'ai modifié mes import en ajoutant "class." mais à la compilation il ne voyait plus mes classes, du coup j'ai remis comme avant et j'ai utilisé l'option -cp de javac.
Je suis resté à la racine de mon dossier et j'ai utilisé la commande :
javac src/*/*.java -cp ./class -d ./class
ça m'a permis de compiler sans erreur.
ensuite j'ai compilé ma classe Application :
javac serc/Application -cp ./class -d ./
ça a compilé sans bug, mais je ne peux pas exécuter. C'est pourtant comme ça que j'avais fait juste avant mais simplement le dossier class en moins, et ça ne posait aucun problème.
Par contre oui j'ai oublié de modifier mes package --'
J'ai ajouté "class." du coup mais là il ne compile plus et je ne vois pas ce que je dois faire :
Je suis resté à la racine de mon dossier et j'ai utilisé la commande :
javac src/*/*.java -cp ./class -d ./class
ça m'a permis de compiler sans erreur.
ensuite j'ai compilé ma classe Application :
javac serc/Application -cp ./class -d ./
ça a compilé sans bug, mais je ne peux pas exécuter. C'est pourtant comme ça que j'avais fait juste avant mais simplement le dossier class en moins, et ça ne posait aucun problème.
Par contre oui j'ai oublié de modifier mes package --'
J'ai ajouté "class." du coup mais là il ne compile plus et je ne vois pas ce que je dois faire :
Commercial.java:6: <identifier> expected package class.employe; ^ Commercial.java:6: class, interface, or enum expected package class.employe; ^ Commercial.java:6: class, interface, or enum expected package class.employe; ^ Employe.java:6: <identifier> expected package class.employe; ^ Employe.java:6: class, interface, or enum expected package class.employe; ^ Employe.java:6: class, interface, or enum expected package class.employe; ^ Manutentionnaire.java:6: <identifier> expected package class.employe; ^ Manutentionnaire.java:6: class, interface, or enum expected package class.employe; ^ Manutentionnaire.java:6: class, interface, or enum expected package class.employe; ^ Ouvrier.java:6: <identifier> expected package class.employe; ^ Ouvrier.java:6: class, interface, or enum expected package class.employe; ^ Ouvrier.java:6: class, interface, or enum expected package class.employe; ^ TechnicoCommercial.java:6: <identifier> expected package class.employe; ^ TechnicoCommercial.java:6: class, interface, or enum expected package class.employe; ^ TechnicoCommercial.java:6: class, interface, or enum expected package class.employe; ^ VRP.java:6: <identifier> expected package class.employe; ^ VRP.java:6: class, interface, or enum expected package class.employe; ^ VRP.java:6: class, interface, or enum expected package class.employe; ^ Personnel.java:6: <identifier> expected package class.personnel; ^ Personnel.java:6: class, interface, or enum expected package class.personnel; ^ Personnel.java:6: class, interface, or enum expected package class.personnel; ^ 21 errors
Donc il doit y avoir une erreur dans l'énoncer car je cite mon sujet : "votre application. Tous vos codes sources seront stockés dans un répertoire nommé src, le
bytecode de vos classes dans un répertoire nommé class. Votre code devra être correctement
commenté et la documentation javadoc générée dans un répertoire docs.
un fichier README, où vous expliquerez en détail ce qu'il faut faire pour utiliser votre
classe « Application »" Merci je teste en remplaçant class par autre chose. Ça me paraissait bizarre aussi depuis que j'avais vu que gedit me colorait le class mais vu que c'était dans le sujet comme ça...
bytecode de vos classes dans un répertoire nommé class. Votre code devra être correctement
commenté et la documentation javadoc générée dans un répertoire docs.
un fichier README, où vous expliquerez en détail ce qu'il faut faire pour utiliser votre
classe « Application »" Merci je teste en remplaçant class par autre chose. Ça me paraissait bizarre aussi depuis que j'avais vu que gedit me colorait le class mais vu que c'était dans le sujet comme ça...
Pour moi "le bytecode de vos classes dans un répertoire nommé class" ne signifie pas que class doit être un package, ça s'apparenterait plutôt au répertoire bin que l'on peut avoir sous Eclipse.
Je pense que tu devrais avoir ceci :
Je pense que tu devrais avoir ceci :
|--- class | |--- Application.class | |--- employe | | |--- Commercial.class | | |--- Employe.class | | |--- Manutentionnaire.class | | |--- Ouvrier.class | | |--- TechnicoCommercial.class | | |--- VRP.class | |--- entree | | |--- Entree.class | |--- liste | | |--- Cellule.class | | |--- Liste.class | |--- personnel | |--- Personnel.class |--- src | |--- Application.java | |--- employe | | |--- Commercial.java | | |--- Employe.java | | |--- Manutentionnaire.java | | |--- Ouvrier.java | | |--- TechnicoCommercial.java | | |--- VRP.java | |--- entree | | |--- Entree.java | |--- liste | | |--- Cellule.java | | |--- Liste.java | |--- personnel | |--- Personnel.java |--- docs