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