bonsoir
comme me l a si gentillement dit frederic j poste mon probleme sur le fofo
aider moi chui nul
j voudrais compiler et executer la classe CoursDonne sans le main avec comme package : package projet;
et le main se trouve ds Main.java et j importe la classe pour pouvoir l executer : import projet.CoursDonne;
et voila ce que j ai comme message d erreur :
Main.java:1: package projet does not exist import projet.CoursDonne; ^ Main.java:5: cannot access CoursDonne bad class file: ./CoursDonne.class class file contains wrong class: projet.CoursDonne Please remove or make sure it appears in the correct subdirectory of the classpath. CoursDonne coursDonnes = new CoursDonne("1","2","3","4",5); ^ 2 errors
et merci d avance. :)
Admettons mais...
Faut savoir si c'est avec ou sans Main.java non ?
Le message d'erreur est clair, tu as compilé Main.java alors que tu as dit ne pas vouloir le faire. Une compilation à l'insu de ton plein gré quoi :)
Or comme CoursDonne.java n'est pas encore compilé, CoursDonne.class n'existe pas et le compilateur la recherche et ne le trouve pas pour compiler Main.java
Attention quand CoursDonne sera compilé ça ne suffira pas. Il faudra encore placer CoursDonne.class dans un répertoire projet et que ce répertoire soit pointé par le classpath pour que le compilateur le voit
Un conseil. Essaie donc déjà de compiler sans package, c'est à dire tout dans le package courant (donc pas de déclaration package dans les fichiers .java). Et veille à donner le répertoire courant dans le classpath en compilant toujours de cette façon
javac .cp;%CLASSPATH% Main.java (Windows)
ou
avac .cp:$CLASSPATH Main.java (Linux)
On t'a probablement dit que ne pas utiliser de package du tout ça ne se fait pas. C'est vrai quand on a l'habitude ;) Pour te faire la main (sans jeu de mot ;) ) Essaie d'abord sans package.
j l'avais compiler mais ta commande
javac .cp:$CLASSPATH Main.java (Linux)
ne fonctionne pasheu oui, excuse moi :oops:
J'étais pris par le temps hier et j'ai écris beaucoup trop vite, et bien sûr fait des fautes de frappe. La commande c'est:
javac -cp .:$CLASSPATH Main.java
avec un espace entre
-cp et .:$CLASSPATH
Tu es sous Linux ?
Bravo! :)
merci mais j vois pas pourquoi je dois taper
javac -cp .:$CLASSPATH Main.java
tout ca alors que si j tape javac Main.java tout court ca marche aussi sans mettre de packagemais j comprend toujours pas pourquoi les packages ne marche pas chez moi
bien sur que j utitlise linux :D Vista peut aller se rhabiller
Bonne question :)
La réponse est que j'ai voulu t'éviter de tomber dans un problème courant. Vois tu, selon la JVM il arrive que le répertoire courant ne figure pas automatiquement dans le classpath. Et dans ce cas ta compilation, même sans package, aurait échoué.
Donc ma commande "compliquée" n'avait pour but que d'intégrer à coup sûr le répertoire courant dans le classpath et je te recommande vivement de toujours le faire pareil ;)
Qu'est-ce que ça veut dire ça ?
Les packages marchent chez toi comme chez tout le monde. Le tout est de savoir les faire marcher. Ca commence par placer les fichiers compilés .class dans les bons répertoires, ce que le compilateur javac ne fait pas tout seul par miracle.
exemple:
Soient les fichiers CoursDonne.java et Main.java dans un répertoire quelconque
le fichier CoursDonne.java contient:
package monpackage;
- tu compiles CoursDonne.java,
- ensuite tu dois *toi même* placer CoursDonne.class dans un sous-repertoire de nom monpackage:
mkdir monpackage
mv CoursDonne.class ./monpackage/CoursDonne.class
ensuite tu compiles Main. Comme dedans il y a:
import monpackage.CoursDonne;
le compilateur va chercher monpackage/CoursDonne dans tous les répertoires pointés par le classpath. Tu comprends maintenant pourquoi je tenais tant à ce que le répertoire courant y figure ;)
Si tu as bien fait la manip que je t'ai décrit, alors Main.Java compilera :)
C'est toujours comme ça que ça fonctionne même si des IDE comme Netbeans ou Eclipse l'escamotent, car ils font toutes ces manips pour toi, automatiquement.
Capito ?
Laisse tomber Java pour un vrai langage comme C, C++, Erlang, Haskell, Lisp ou Python et tu seras sur la bonne voie ;)
Quel Linux au fait ?
ah cool merci ca marche mais c est lourd come manip
pourquoi est ce que quand je tape echo $CLASSPATH
c est vide?
facile a dire je suis obliger de travailler dessus
moi j utilise Suse :)
:)
Parfait, je suis heureux de t'avoir dépanné.
Alors sache que dès que Java est dans le coup, il y a comme une lourdeur, une pesanteur ambiante... :lol:
Tu le sais sans doute, je ne l''aime pas beaucoup ce ¤¤¤¤ langage :)
Pour cette manip particulière, maintenant que tu as compris le principe, (c'est toujours important de comprendre ce qu'on fait), tu peux te reposer sur des outils comme Netbeans ou Eclipse qui vont faire les manips pour toi
Parce que c'est vide :)
Dans ton Linux, CLASSPATH n'est pas définie. Mais moi je ne pouvais pas le savoir. Je suis loin et de là où je suis je ne vois pas bien ta machine ;)
Alors pour être sûr de ne pas abimer ton CLASSPATH, je t'ai dit
javac -cp .:$CLASSPATH Main.java
Alors que dans ce cas précis
javac -cp . Main.java
Aurait suffit.
Tu parles de Java là ? Oui je sais bien que tu as un travail à faire en Java.
Mais comme je ne dédaigne pas lancer de temps en temps un bon gros troll anti Java, je vais te dire:
Quand on a fait beaucoup de Java et rien que du Java, on ignore à peu près tout de l'informatique. Et je trouve triste à pleurer que de nos jours à l'école les gars n'apprennent que Java et Java entre deux cours de Java.
Alors toi, comme tu es sous Linux, tu as dans les mains un outil et un environnement ideaux pour voir d'autres choses par toi même. Bref ouvrir tes horizons et ça serait dommage de t'en priver. C'est un peu ce que je voulais te dire dans mon message précédent :)
Ah Suse... Je l'aimais bien jusqu'à un moment. Mais ces dernières années, trop de problèmes à s'arracher les cheveux avec les mises à jour.
Moi je suis Gentoo à fond.
J'en ai 4 en réseau en ce moment et j'en suis très content. "C'est d'la bombe" comme vous dites maintenant les jeunots ;)
Au plaisir de te revoir sur ce forum :)