Java dans le terminal

Steph-24

Membre expert
Club iGen
11 Janvier 2006
1 388
59
38
Strasbourg
Bonsoir à tous,

Je suis étudiant et je dois commencer à programmer en Java à l'université. Comme je préfère mon MacBook aux PC's de l'université, j'aurais quelques questions à poser à propos de la compilation et de l'exécution.

- J'arrive à compiler en faisant $ javac Prog1.java.
Cela me donne un fichier Prog1.class, mais après, j'ai essayer de l'exécuter en faisant
$ java Prog1.class comme on m'a appris en cours mais ça ne fonctionne pas.
j'ai une erreur du type : Exception in thread "main" java.lang.NoClassDefFoundError: Prog/class

- Et ensuite, je dois aussi faire un lien entre Java et une sorte de librairie que j'ai placer dans "/Developer/RepIUT/. Ce lien doit être créer avec "CLASSPATH" mais je ne comprend pas trop.

Désolé si ça parait un peu bête, mais je sais déjà compiler et exécuter en C++, mais avec JAVA, que j'ai commencé aujourd'hui, j'ai un peu de mal.

Votre aide sera la bienvenue.

Merci d'avance. :up:
 
bonsoir,

pour l'exécution, deux possibilités:
  1. ta classe n'a pas de fonction main
  2. le classpath n'est pas défini, auquel cas, il faudrait java -cp . MaClasse

Pour la librairie, est-ce qu'il s'agit d'un .jar ou d'une DLL (ou .so...) ? (je pencherai pour le jar).

Dans ce cas, il faut indiquer à Java le chemin du jar (dans lequel doit certainement se trouver des fonctions supplémentaires). De la même façon que précédemment, où tu as mis "." (i.e. le répertoire courant, là où tu as ton .class et ton .java), il suffit d'y rajouter le chemin à ton jar. On a donc:
Bloc de code:
java -cp .:/Developer/RepIUT/lejardeliut.jar MaClasse

A noter que l'option -cp est équivalente à -classpath ;).
 
Merci pour votre aide toujours aussi rapide :)

Pour l'exécution, c'est bon, ça fonctionne.
En effet, il ne fallait pas écrire $ java Prog1.class mais $ java Prog1
j'ai voulu faire comme en C++ avec *.out :)

Pour la librairie, je ne sais pas si c'est vraiment le bon terme.
En fait, il s'agit de deux fichiers Console.class et Console.java
Il m'ont été fourni par mon IUT pour pouvoir interagir plus facilement avec l'utilisateur (écrire à l'écran et lire au clavier)
Sur le site de l'IUT, on me dit

Bloc de code:
	1.	Télécharger iutsud.zip ou les Assertion.class et Console.class du répertoire iutsud.
	2.	Créer un répertoire iutsud dans le répertoire rep de votre choix.
	3.	Copier les fichiers Assertion.class et Console.class dans le répertoire rep/iutsud .
	4.	Mettre à jour la variable d'environnement CLASSPATH pour qu'elle contienne le répertoire courant . et le répertoire rep (CLASSPATH=".;rep").

Et je ne comprend pas trop quoi faire de ces fichiers :)
Je sais juste que pour les utiliser dans un programme, je dois faire :
import iutsud.Console
Et j'ai essayé, mon programme fonctionne si je place ces fichiers dans le même dossier que l'exécutable JAVA, mais d'après l'IUT, on peut faire un lien pour que le compilateur ou l'intépreteur sache où chercher, n'importe où se trouve mon exécutable.

C'est compliquer à expliquer :D

Pour info Lordjem, je suis en 1ère année de DUT informatique à Strasbourg ;)
 
Oui, c'est bien un problème de classpath, à un détail près le séparateur de chemin est ; sous Windows, mais : sous mac os/linux :D.

3. Copier les fichiers Assertion.class et Console.class dans le répertoire rep/iutsud .
tu crées un répertoire n'importe où sur ton disque qui va accueuillir les classes Console et Exception

4. Mettre à jour la variable d'environnement CLASSPATH pour qu'elle contienne le répertoire courant . et le répertoire rep (CLASSPATH=".;rep").
il faut que le classpath - càd la chaine qui décrit tous les endroits de ton disque où Java va chercher à charger les classes- contienne le répertoire rep, ainsi, il trouvera la classe Console qui se trouve dans le paquet iut (d'où l'import en haut dans ta classe).
 
Je n'y arrive toujours pas! :siffle:

J'ai placé les fichers Assertion.class et Console.class dans le dossier suivant:
/Developer/iutsud

Mais je n'arrive pas à définir le classpath pour que JAVA cherche dans ce dossier.

Pourrais-tu me donner la commande exacte qu'il faut que je rentre ;)
 
Bon j'ai essayé avec ta commande. Rien à faire, je n'y arrive pas.
Ca commence à m'enerver ce terminal !

Je dois faire quelque chose de travers mais je ne sais pas quoi.
J'ai toujours cette erreur :

Exception in thread "main" java.lang.NoClassDefFoundError: Console/java
 
Bon j'ai essayé avec ta commande. Rien à faire, je n'y arrive pas.
Ca commence à m'enerver ce terminal !

Je dois faire quelque chose de travers mais je ne sais pas quoi.
J'ai toujours cette erreur :

Exception in thread "main" java.lang.NoClassDefFoundError: Console/java

Le message d'erreur indique que Java essaie de charger une classe Console/java qu'il ne trouve pas....
  1. est-ce que ton code compile ?
  2. as-tu les droits pour accéder aux ressources de ton classpath ?

Poste ton main entre deux balises [ code ] [ /code ], on verra ce qu'on peut faire...
 
(Steph-24 m'a envoyé en m.p. son projet)

Voici la réponse (histoire que les autres en profitent):



Ca marche ;)... Rassure-toi, tu n'es pas fou !

Le seul truc, c'est que les classes Assertion et Console que tu as ont été compilées en Java 5. Par défaut, Mac OS X est en Java 4.

Du coup, tu essaies de faire fonctionner du code Java 4 (ta classe) avec des classes compilées en Java5. Or la compatibilité est ascendante.

Donc, pour résoudre ton souci, deux possibilités:
- tu recompiles tes classes Assertion et Console en Java 4 (pour ce, va dans le répertoire iutsud et fais un simple javac *java
- tu utilises Java5 pour compiler ta classe de test (la manip est un peu plus compliquée car changer de JDK n'est pas très "immédiat" au début, et ce n'est même pas dit que tu l'aies d'installé)

Pour continuer tes cours, il se peut que tu aies besoin de Java 5 (voire 6). Pour ce, il faut que tu te créées un compte sur l'ADC (gratuit) et que tu télécharges les DMG qui vont bien. Ensuite, doit y avoir de la doc pour changer de JDK sous mac os: c'est l'affaire de changer un lien symbollique.
 
Dans mon cas, par quoi dois-je remplacer Prog1 dans la commande suivante ?

Bloc de code:
java -cp .:/Developer Prog1

j'ai recompiler les fichiers du dossier IUT :)
 
J'arrive toujours pas à défnir un chemin.
C'est pas grave, je laisse tomber. Je place à chaque fois les fichiers qu'il me faut dans le dossier où je compile