Problème de compilation java

[Résolu/Fermé]
Signaler
Messages postés
330
Date d'inscription
vendredi 19 juin 2009
Statut
Membre
Dernière intervention
11 novembre 2014
-
Messages postés
330
Date d'inscription
vendredi 19 juin 2009
Statut
Membre
Dernière intervention
11 novembre 2014
-
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 :
. 
|--- 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 ?

2 réponses

Messages postés
16400
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
21 septembre 2021
2 880
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.
Messages postés
330
Date d'inscription
vendredi 19 juin 2009
Statut
Membre
Dernière intervention
11 novembre 2014
22
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 :
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
Messages postés
330
Date d'inscription
vendredi 19 juin 2009
Statut
Membre
Dernière intervention
11 novembre 2014
22
Sinon pour l'arborescence je l'ai faite comme ça car c'est indiqué dans le sujet qu'elle doit être comme ça donc je n'ai pas le choix.
Messages postés
16400
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
21 septembre 2021
2 880
Tu ne peux pas avoir un package qui s'appelle "class" ni aucun autre mot clé du langage Java !
Donc soit ton énoncé est faux, soit tu l'as mal compris.
Messages postés
330
Date d'inscription
vendredi 19 juin 2009
Statut
Membre
Dernière intervention
11 novembre 2014
22
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...
Messages postés
16400
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
21 septembre 2021
2 880
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 :

|--- 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
Messages postés
330
Date d'inscription
vendredi 19 juin 2009
Statut
Membre
Dernière intervention
11 novembre 2014
22
En effet cela semble correspondre au sujet aussi. Merci en tout cas maintenant cela fonctionne.