# Java dans le terminal



## Steph-24 (5 Février 2007)

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.


----------



## GrandGibus (5 Février 2007)

bonsoir, 

pour l'exécution, deux possibilités:

ta classe n'a pas de fonction main
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: 

```
java -cp .:/Developer/RepIUT/lejardeliut.jar MaClasse
```

A noter que l'option -cp est équivalente à -classpath .


----------



## Lordjem (5 Février 2007)

salut, 

de plus la commande exact est : 

  $ java Prog1


pas de .class à la fin.

Tu es en quelle année ? moi je suis en troisième année de licence (info aussi) à Amiens


----------



## Steph-24 (5 Février 2007)

Merci pour votre aide toujours aussi rapide 

Pour l'ex&#233;cution, c'est bon, &#231;a fonctionne.
En effet, il ne fallait pas &#233;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 &#233;t&#233; fourni par mon IUT pour pouvoir interagir plus facilement avec l'utilisateur (&#233;crire &#224; l'&#233;cran et lire au clavier)
Sur le site de l'IUT, on me dit


```
1.	T&#233;l&#233;charger iutsud.zip ou les Assertion.class et Console.class du r&#233;pertoire iutsud.
	2.	Cr&#233;er un r&#233;pertoire iutsud dans le r&#233;pertoire rep de votre choix.
	3.	Copier les fichiers Assertion.class et Console.class dans le r&#233;pertoire rep/iutsud .
	4.	Mettre &#224; jour la variable d'environnement CLASSPATH pour qu'elle contienne le r&#233;pertoire courant . et le r&#233;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&#233;, mon programme fonctionne si je place ces fichiers dans le m&#234;me dossier que l'ex&#233;cutable JAVA, mais d'apr&#232;s l'IUT, on peut faire un lien pour que le compilateur ou l'int&#233;preteur sache o&#249; chercher, n'importe o&#249; se trouve mon ex&#233;cutable.

C'est compliquer &#224; expliquer 

Pour info Lordjem, je suis en 1&#232;re ann&#233;e de DUT informatique &#224; Strasbourg


----------



## GrandGibus (6 Février 2007)

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 *. 



> 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).


----------



## Steph-24 (6 Février 2007)

Je n'y arrive toujours pas!  

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


----------



## GrandGibus (6 Février 2007)

r&#233;ponse: 

```
java -cp .:/Developer Prog1
```

&#224; lancer depuis le r&#233;pertoire qui contient _Prog1_.

Attention aux majuscules  mais aussi aux droits... je ne suis pas certain que Developer soit le meilleur endroit pour cela.


----------



## tatouille (6 Février 2007)

manifest + jar


----------



## GrandGibus (7 Février 2007)

tatouille a dit:


> manifest + jar



Il y viendra... pendant le cours de la semaine prochaine :rateau:.


----------



## Steph-24 (8 Février 2007)

Bon j'ai essay&#233; avec ta commande. Rien &#224; faire, je n'y arrive pas.
Ca commence &#224; 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


----------



## GrandGibus (8 Février 2007)

Steph-24 a dit:


> 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.
> ...



Le message d'erreur indique que Java essaie de charger une classe _Console/java_ qu'il ne trouve pas.... 

est-ce que ton code compile ?
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...


----------



## GrandGibus (9 Février 2007)

(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.


----------



## Steph-24 (9 Février 2007)

Dans mon cas, par quoi dois-je remplacer Prog1 dans la commande suivante ?


```
java -cp .:/Developer Prog1
```

j'ai recompiler les fichiers du dossier IUT


----------



## Steph-24 (12 Février 2007)

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


----------

