Problème de compilation java

Résolu/Fermé
katsuo49 Messages postés 330 Date d'inscription vendredi 19 juin 2009 Statut Membre Dernière intervention 11 novembre 2014 - Modifié par katsuo49 le 1/04/2012 à 23:01
katsuo49 Messages postés 330 Date d'inscription vendredi 19 juin 2009 Statut Membre Dernière intervention 11 novembre 2014 - 1 avril 2012 à 23:44
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 ?

A voir également:

2 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
1 avril 2012 à 23:02
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.
0
katsuo49 Messages postés 330 Date d'inscription vendredi 19 juin 2009 Statut Membre Dernière intervention 11 novembre 2014 25
1 avril 2012 à 23:13
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
0
katsuo49 Messages postés 330 Date d'inscription vendredi 19 juin 2009 Statut Membre Dernière intervention 11 novembre 2014 25
1 avril 2012 à 23:14
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.
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
1 avril 2012 à 23:26
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.
0
katsuo49 Messages postés 330 Date d'inscription vendredi 19 juin 2009 Statut Membre Dernière intervention 11 novembre 2014 25
1 avril 2012 à 23:31
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...
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
1 avril 2012 à 23:38
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
0
katsuo49 Messages postés 330 Date d'inscription vendredi 19 juin 2009 Statut Membre Dernière intervention 11 novembre 2014 25
1 avril 2012 à 23:44
En effet cela semble correspondre au sujet aussi. Merci en tout cas maintenant cela fonctionne.
0