Les lignes de commande utiles
Licence info S5
TP COMPIL –
1
Pour utiliser Java
Vous devez modifier votre fichier .bashrc qui est dans votre HOME, cf
http://intranet.fil.univ-lille1.fr/INTRANET/LOGICIELS/java.html
2
Commandes Java
Vous avez appris en POO à structurer votre répertoire de travail de telle sorte que :
– les sources (.java) soient dans un répertoire src ;
– les classes (.class) soient dans un répertoire classes ou bin.
Il n’est pas pratique de passer son temps à entrer dans et sortir de ces répertoires : il est bien plus simple
de taper les lignes de commande en restant dans le répertoire de travail.
2.1
Compilation
NB : une alternative avantageuse au paragraphe qui suit est d’apprendre à utiliser Ant (un make
spécial Java), mais ce n’est pas le propos de COMPIL.
Pour compiler, si on a une classe maı̂tresse (qui contient le main) on peut utiliser le calcul des
dépendances du compilateur :
javac -d classes -sourcepath src -classpath classes src/<nomPaquetage>/<nomClasseMaitresse>.java
TP COMPIL
Les lignes de commande utiles
(pour éviter de redémarrer, on peut temporairement faire un source ∼/.bashrc dans les terminaux
qu’on utilise).
Par contre, il n’est pas souhaitable de cabler en dur dans son CLASSPATH via le fichier bashrc tous
les .jar divers et variés que vous utilisez lors de votre année, car rapidement le CLASSPATH devient
complètement illisible. Il est bien plus pratique de se faire des scripts, par exemple envCompil.sh contenant :
export CLASSPATH=<chemindacces>/toto.jar:<chemindacces>/titi.jar:$CLASSPATH
Ensuite, dans chaque terminal qu’on utilise, on lance source envCompil.sh. Bien utiliser source et
pas sh. En effet, sh crée un processus, positionne la variable CLASSPATH dedans, puis referme ce processus,
ce qui au final n’a aucun effet dans le terminal ! Ainsi votre CLASSPATH contiendra ce que vous y avez mis
dans le bashrc, plus l’accès à toto.jar et titi.jar.
2.2
Exécution
La classe exécutable se trouvant dans le répertoire classes, java ne la voit pas directement depuis
le répertoire de travail. Il n’est pas question de faire un
java classes/<nomPaquetage>/<comclasseMaitresse>.class car java attend un nom qualifié absolu
de classe, pas un .class.
Comme pour la compilation, il suffit d’avoir le répertoire classes soit sur la ligne de commande avec
-classpath, soit via la variable CLASSPATH. On peut alors écrire :
L’option -d indique le répertoire pour écrire les .class, l’option -sourcepath indique le répertoire où
chercher les .java et l’option -classpath indique le répertoire où chercher les .class (pour ne pas
recompiler un fichier inutilement). Pour voir la différence avec une compilation brutale, on peut essayer
avec l’option -verbose :
java -classpath classes nomPaquetage.nomClassePrincipale
javac -d classes ‘ls src/<nomPaquetage>/*.java‘
On prend vite goût aux scripts divers et variés (pour compiler, lancer l’application, nettoyer les fichiers
générés, lancer des tests, fabriquer une archive, etc). On gagne ainsi un temps considérable. Mais on se
retrouve avec un répertoire de travail rempli de scripts !
Pour garder un espace de travail clair et ordonné, il suffit de créer dans le répertoire de travail (au
même niveau que les répertoires src et classes) un répertoire script. Pour éviter d’entrer et sortir de
ce répertoire dès qu’on souhaite exécuter un script, il suffit de positionner la variable PATH. Cette variable
Unix contient le chemin des programmes exécutables. Vous pouvez visualiser son contenu par :
Si les sources à compiler utilisent des classes (.class) qui sont ailleurs, soit dans le répertoire d’un
autre TP, soit dans une archive .jar quelque part, il faut indiquer à javac le répertoire de ces classes.
On peut continuer à utiliser l’option -classpath :
javac -d classes -classpath <chemindacces>/toto.jar:classes -sourcepath src
src/<nomPaquetage>/<nomClasseMaitresse>.java
3
Scripts et variable PATH
echo $PATH
Comme généralement les chemins d’accès sont à rallonge, on en a rapidement assez de taper tout ça.
Une première solution est d’enregistrer la ligne de commande dans un fichier (par exemple compil.sh)
et de lancer juste sh compil.sh.
On peut aussi éviter l’option -classpath en utilisant la variable d’environnement Java CLASSPATH. Sa
valeur par défaut (c’est le cas sur votre compte) indique le répertoire courant : les fichiers et paquetages
du répertoire courant sont toujours disponibles. Quand elle est utilisée, l’option -classpath substitue
son argument à CLASSPATH. Vous pouvez consulter votre CLASSPATH par :
Pour ajouter le répertoire scripts à votre PATH, il suffit d’ajouter dans votre fichier envCompil.sh :
export PATH=scripts:$PATH
Ensuite vous pourrez directement lancer le script qui vons intéresse depuis le répertoire de travail (et
utiliser la complétion par tabulation).
echo $CLASSPATH
Comme on utilise presque toujours le même nom de répertoire pour stocker les .class, on peut configurer
la variable CLASSPATH dans le fichier de démarrage .bashrc qui est dans votre HOME par :
CLASSPATH=classes:class:bin:.
export CLASSPATH
Ainsi, au démarrage, dans n’importe quel terminal on aura :
> echo $CLASSPATH
classes:class:bin:.
TP COMPIL
2
Licence info S5