Chapitre en accès libre
Installer VS Code et l’Extension Pack for Java, premier programme
20 min de travail — lecture et pratique
Vous avez déjà un JDK 11 installé et vérifié. Il vous manque l’endroit où écrire le code, et surtout l’outil dont vous vous servirez chaque fois que quelque chose ne marchera pas : le débogueur. Sans lui, le jour où un test Selenium échouera sans rien dire, vous en serez réduit à semer des System.out.println partout. Avec lui, vous arrêtez le programme à la ligne qui vous intéresse et vous regardez ce qu’il y a dans les variables.
Ce chapitre vous fait installer VS Code, y brancher Java, écrire un programme d’une trentaine de lignes, l’exécuter, puis l’arrêter en plein vol pour inspecter son état.
Ce que ce chapitre ne couvre pas
Pour éviter toute ambiguïté : pas de Maven, pas de projet structuré en src/main/java, pas de packages, pas de JUnit, pas de Selenium, pas de Git. Un seul fichier .java dans un dossier, compilé et exécuté par VS Code. Tout le reste arrive dans les chapitres suivants, et arrivera plus facilement une fois que le débogueur sera acquis.
Prérequis : vérifier le JDK avant d’installer quoi que ce soit
Ouvrez un terminal (Invite de commandes ou PowerShell sur Windows, Terminal sur macOS et Linux) et tapez les deux commandes suivantes :
java -version
javac -version
Vous devez obtenir deux réponses, et javac doit répondre — pas seulement java. java -version affiche trois lignes, javac -version une seule. Quelque chose comme :
openjdk version "11.0.21" 2023-10-17
OpenJDK Runtime Environment (build 11.0.21+9)
OpenJDK 64-Bit Server VM (build 11.0.21+9, mixed mode)
javac 11.0.21
Les numéros exacts et le texte entre parenthèses dépendent de la distribution du JDK que vous avez installée. Ce qui compte : les deux commandes répondent, et les deux annoncent une version 11.
Si javac répond « commande introuvable » alors que java fonctionne, vous avez un JRE et pas un JDK, ou le bin du JDK n’est pas dans votre PATH. Revenez au chapitre d’installation du JDK : VS Code ne compilera rien tant que ce point n’est pas réglé.
Notez aussi la valeur de JAVA_HOME, vous en aurez peut-être besoin plus bas.
Sur macOS et Linux :
echo $JAVA_HOME
Sur Windows, dans PowerShell :
echo $env:JAVA_HOME
Sur Windows, dans l’Invite de commandes :
echo %JAVA_HOME%
Si la commande ne renvoie rien du tout, c’est que la variable n’est pas définie. Ce n’est pas bloquant : vous retrouverez le chemin du JDK dans le dossier d’installation (C:\Program Files\Java\, /Library/Java/JavaVirtualMachines/, /usr/lib/jvm/).
Étape 1 — Installer VS Code
Le téléchargement se fait sur https://code.visualstudio.com/download. Prenez la version correspondant à votre système.
Windows
Téléchargez le User Installer (il s’installe dans votre profil utilisateur, sans droits administrateur). Pendant l’assistant, cochez la case « Ajouter à PATH » / « Add to PATH ». C’est elle qui vous permettra de taper code . dans un terminal, ce dont vous vous servirez souvent.
Cette case ne prend effet que dans un terminal ouvert après l’installation. Si vous testez code --version dans une fenêtre restée ouverte pendant l’installation, elle répondra que la commande est introuvable : fermez-la et rouvrez-en une.
macOS
Téléchargez le .zip, décompressez-le, et glissez Visual Studio Code.app dans le dossier Applications. Si vous utilisez Homebrew :
brew install --cask visual-studio-code
Pour activer la commande code dans le terminal : lancez VS Code, ouvrez la palette de commandes avec Cmd+Shift+P, tapez shell command, et choisissez Shell Command: Install ‘code’ command in PATH.
Linux (Debian, Ubuntu et dérivés)
Téléchargez le paquet .deb, puis, dans le dossier de téléchargement :
sudo apt install ./code_*.deb
Le ./ devant le nom du fichier n’est pas décoratif : sans lui, apt cherche un paquet de ce nom dans les dépôts au lieu d’installer le fichier local.
Sur Fedora ou openSUSE, prenez le .rpm et installez-le avec sudo dnf install ./code-*.rpm ou sudo zypper install ./code-*.rpm.
Vérification : lancez VS Code. La fenêtre s’ouvre sur un écran d’accueil. Dans un terminal neuf, code --version doit répondre par trois lignes (numéro de version, identifiant de commit, architecture). Si code n’est pas reconnu, ce n’est pas bloquant pour la suite du chapitre — vous ouvrirez les dossiers par le menu Fichier > Ouvrir le dossier.
Étape 2 — Installer l’Extension Pack for Java
VS Code, seul, ne sait pas ce qu’est Java. Il colorera vaguement votre fichier et s’arrêtera là. Ce sont les extensions qui apportent la compilation, l’autocomplétion, le lancement et le débogage.
Dans VS Code :
- Ouvrez le panneau Extensions : icône des quatre carrés dans la barre latérale, ou
Ctrl+Shift+X(Cmd+Shift+Xsur macOS). - Tapez
Extension Pack for Javadans la recherche. - Prenez celui publié par Microsoft — vérifiez le nom de l’éditeur sous le titre. Plusieurs extensions ont des noms voisins.
- Cliquez sur Install.
Ou, en une commande dans le terminal :
code --install-extension vscjava.vscode-java-pack
C’est un pack : il en installe plusieurs d’un coup, dont Language Support for Java by Red Hat (l’analyse du code et la compilation), Debugger for Java (ce qui nous intéresse ici), Test Runner for Java et Maven for Java (qui serviront plus tard). L’installation enchaîne ces téléchargements les uns après les autres ; laissez-la finir, c’est-à-dire attendez que le bouton Install soit remplacé par une roue dentée sur chacune des extensions du pack.
Redémarrez VS Code une fois l’installation terminée. Ce n’est pas toujours nécessaire, mais cela évite une bonne partie des comportements bizarres qui suivent une première installation.
Étape 3 — Vérifier que VS Code voit bien votre JDK
Cette étape conditionne tout le reste du chapitre. Un JDK mal détecté ne se signale pas clairement : il se manifeste plus tard par du soulignement rouge sur du code correct, ou par l’absence du bouton Run.
Ouvrez la palette de commandes (Ctrl+Shift+P, ou Cmd+Shift+P sur macOS), tapez Java: Configure Java Runtime et validez. Un onglet s’ouvre et liste les JDK que l’extension a détectés sur votre machine.
Ce que vous devez voir : au moins une ligne mentionnant votre JDK 11, avec son chemin d’installation.
Si la liste est vide, ou si votre JDK 11 n’y est pas
Ouvrez les réglages au format JSON : palette de commandes, Preferences: Open User Settings (JSON).
Si le fichier est vide, il contient seulement une paire d’accolades. Vous obtenez alors ceci, en remplaçant le chemin par celui de votre JDK (celui que donnait JAVA_HOME) :
{
"java.configuration.runtimes": [
{
"name": "JavaSE-11",
"path": "C:\\Program Files\\Java\\jdk-11.0.21",
"default": true
}
]
}
Si le fichier contient déjà des réglages, ne collez pas ce bloc tel quel : vous vous retrouveriez avec deux objets racine, donc un JSON invalide que VS Code ignore en bloc, sans message visible. N’insérez que la ligne "java.configuration.runtimes": [ ... ] à l’intérieur des accolades existantes, et ajoutez une virgule entre cette entrée et la précédente.
Sur macOS le chemin ressemble à /Library/Java/JavaVirtualMachines/jdk-11.0.21.jdk/Contents/Home, sur Linux à /usr/lib/jvm/java-11-openjdk-amd64. Sur Windows, les antislashs doivent être doublés dans un fichier JSON : C:\\Program Files\\.... C’est une source d’erreur classique.
Enregistrez, puis relancez Java: Configure Java Runtime pour vérifier.
Si VS Code affiche un message réclamant un JDK plus récent
Selon sa version, l’extension Red Hat a besoin d’un JDK récent pour faire tourner son propre serveur d’analyse — indépendamment de la version que compilent vos programmes. Le message est explicite et donne la version minimale attendue.
Dans ce cas, installez ce JDK plus récent en plus du 11 (les deux cohabitent sans problème), et indiquez-le à l’extension, en respectant la même règle que ci-dessus quant aux accolades existantes :
{
"java.jdt.ls.java.home": "/chemin/vers/le/jdk/recent"
}
Votre code continue d’être compilé pour Java 11 via java.configuration.runtimes. Les deux réglages ne servent pas à la même chose : java.jdt.ls.java.home fait tourner l’outillage, java.configuration.runtimes déclare les JDK disponibles pour vos programmes.
Étape 4 — Écrire le premier programme
Créez un dossier vide quelque part dans vos documents, par exemple bilan-tests. Puis ouvrez ce dossier dans VS Code : menu Fichier > Ouvrir le dossier, ou code chemin/vers/bilan-tests dans un terminal.
Ouvrez un dossier, pas un fichier isolé. L’extension Java a besoin d’un dossier de travail pour construire son projet implicite. C’est l’explication la plus courante du problème « le bouton Run n’apparaît pas ».
Dans l’explorateur de VS Code, créez un fichier nommé exactement BilanCampagne.java. Le nom du fichier doit correspondre au caractère près au nom de la classe publique qu’il contient, majuscules comprises. bilanCampagne.java ne compilera pas.
Collez ce code :
openjdk version "11.0.21" 2023-10-17
OpenJDK Runtime Environment (build 11.0.21+9)
OpenJDK 64-Bit Server VM (build 11.0.21+9, mixed mode)
javac 11.0.210
Ce n’est pas un « Bonjour le monde ». Il y a un tableau, une boucle, un compteur qui évolue à chaque tour, et un calcul à la fin. Autrement dit : de quoi poser un point d’arrêt utile.
Enregistrez le fichier (Ctrl+S, ou Cmd+S sur macOS). Tant qu’il n’est pas enregistré, l’extension travaille sur une version du fichier que le compilateur ne voit pas.
Deux remarques sur ce code :
- Les textes affichés n’ont aucun accent. Ce n’est pas de la négligence. Sur Windows, la console utilise historiquement un encodage différent de celui du fichier source, et les accents ressortent en caractères illisibles. Tant que vous débutez, gardez les accents hors des
System.out.println: vous éliminez un faux problème. (double) reussisforce la division à se faire en virgule flottante. Sans ce transtypage,reussis / totalvaudrait0parce que Java diviserait deux entiers. Vous reverrez ce piège dans le chapitre sur les types.
Étape 5 — Exécuter
Deux repères apparaissent au-dessus de la ligne public static void main : les liens Run et Debug. S’ils n’apparaissent pas, attendez quelques secondes — l’extension analyse le projet à la première ouverture, et une barre de progression tourne en bas à droite.
Cliquez sur Run. Un terminal s’ouvre en bas de la fenêtre.
Critère de réussite
La première ligne du terminal est la commande que VS Code a construite pour lancer votre programme : un long chemin vers le java de votre JDK, des options, un -cp, puis BilanCampagne. Elle est normale, et elle varie d’une machine à l’autre. Ignorez-la.
Après elle, vous devez voir exactement ces six lignes, dans cet ordre :
ECHEC : Paiement
ECHEC : Recherche
Total de cas executes : 5
Reussis : 3
Echoues : 2
Taux de reussite : 60.0 %
Les deux lignes ECHEC sortent avant le bilan : elles sont affichées pendant la boucle, le bilan après. Si votre sortie diffère, ne passez pas à la suite ; regardez le tableau de dépannage en fin de chapitre.
Le raccourci clavier équivalent est Ctrl+F5 (exécuter sans débogage), sur les trois systèmes.
Étape 6 — Le débogueur
C’est le cœur du chapitre. Tout ce qui précède n’était que de la plomberie.
Poser un point d’arrêt
Un point d’arrêt (breakpoint) est une ligne où le programme s’arrête pour vous laisser regarder son état.
Cliquez dans la marge gauche, juste à gauche du numéro de ligne, en face de la ligne :
if (estReussi) {
Un disque rouge apparaît. Le raccourci équivalent est F9, curseur placé sur la ligne. Pour l’enlever, recliquez dessus.
Cette ligne est à l’intérieur de la boucle : le programme s’y arrêtera cinq fois, une par cas de test.
Lancer en mode débogage
Cliquez sur Debug au-dessus de main, ou appuyez sur F5.
Le programme démarre, puis s’immobilise. La ligne du point d’arrêt est surlignée. Une petite barre d’outils flottante apparaît en haut de l’éditeur, et la barre d’état en bas de la fenêtre passe en orange. Le programme est en pause, il n’est pas terminé.
Basculez sur la vue Exécuter et déboguer (icône du triangle avec un insecte dans la barre latérale, ou Ctrl+Shift+D, Cmd+Shift+D sur macOS). Quatre panneaux s’y affichent :
| Panneau | Ce qu’il vous montre |
|---|---|
| VARIABLES | La valeur de chaque variable vivante à cet instant |
| WATCH (Espion) | Des expressions que vous demandez à suivre en permanence |
| CALL STACK (Pile d’appels) | La chaîne des méthodes qui ont mené jusqu’ici |
| BREAKPOINTS | La liste de vos points d’arrêt, activables et désactivables |
Lire les variables
Dépliez VARIABLES > Local. Le panneau affiche toutes les variables vivantes à cet endroit, y compris args, casDeTest et resultats, que nous laissons de côté ici. Au premier arrêt, vous devez lire :
| Variable | Valeur |
|---|---|
i |
0 |
nom |
"Connexion" |
estReussi |
true |
reussis |
0 |
echoues |
0 |
En revanche, total et taux n’apparaissent pas encore : leurs lignes de déclaration sont après la boucle et n’ont pas été atteintes.
reussis vaut encore 0 : la ligne d’incrémentation n’a pas été exécutée. Le point d’arrêt s’arrête avant la ligne surlignée, jamais après. C’est le premier réflexe à acquérir.
Vous pouvez aussi simplement survoler une variable avec la souris dans l’éditeur : une infobulle affiche sa valeur.
Avancer pas à pas
La barre d’outils flottante propose six boutons. Voici ce qu’ils font, et quand s’en servir :
| Bouton | Raccourci | Effet |
|---|---|---|
| Continue | F5 |
Repart jusqu’au prochain point d’arrêt |
| Step Over | F10 |
Exécute la ligne courante et s’arrête à la suivante |
| Step Into | F11 |
Entre à l’intérieur de la méthode appelée sur cette ligne |
| Step Out | Shift+F11 |
Termine la méthode courante et remonte à l’appelant |
| Restart | Ctrl+Shift+F5 |
Arrête et relance la session depuis le début |
| Stop | Shift+F5 |
Arrête le programme |
Sur un Mac, selon vos réglages clavier, il faut parfois maintenir Fn pour que les touches F5 à F11 agissent comme des touches de fonction ; Restart y est Cmd+Shift+F5.
Faites maintenant l’exercice suivant, dans l’ordre :
- Appuyez sur
F10deux fois. Vous passez dans la brancheif, puisreussispasse à1dans le panneau VARIABLES. La valeur qui change apparaît brièvement en surbrillance. - Appuyez sur
F5. Le programme repart et s’arrête de nouveau au même endroit, mais au tour suivant :ivaut1,nomvaut"Ajout au panier". - Appuyez encore sur
F5. Troisième tour :ivaut2,nomvaut"Paiement",estReussivautfalse. FaitesF10trois fois et observezechouespasser à1, puis la ligneECHEC : Paiements’afficher dans le panneau TERMINAL (ou dans DEBUG CONSOLE si la sortie de vos programmes y est dirigée — les deux configurations existent selon la version de l’extension). - Appuyez sur
F5jusqu’à la fin. La barre orange disparaît, le programme est terminé.
Le point d’arrêt conditionnel
Arrêter cinq fois, c’est supportable. Sur une boucle de deux mille itérations, non. VS Code sait s’arrêter seulement quand une condition est vraie.
Clic droit sur votre point d’arrêt rouge > Modifier le point d’arrêt / Edit Breakpoint, puis choisissez Expression. Saisissez :
i == 2
Validez avec Entrée. Le disque rouge porte maintenant un petit repère. Relancez avec F5 : le programme ne s’arrête plus qu’une seule fois, au troisième tour, avec nom valant "Paiement".
C’est la technique que vous utiliserez quand un test échouera sur la ligne 47 d’un fichier de données de 300 lignes.
La console de débogage
Pendant que le programme est en pause, ouvrez l’onglet DEBUG CONSOLE (à côté de TERMINAL). Vous pouvez y taper des expressions Java qui sont évaluées dans le contexte de l’arrêt. Essayez :
reussis + echoues
La console répond avec le total courant. Essayez aussi nom.length() ou casDeTest[4]. Vous interrogez un programme vivant — c’est là que le débogueur cesse d’être un gadget.
Quand ça rate
| Symptôme | Cause probable | Ce que vous faites |
|---|---|---|
Pas de lien Run / Debug au-dessus de main |
Vous avez ouvert un fichier, pas un dossier | Fichier > Ouvrir le dossier, puis rouvrez le .java |
| Pas de lien Run / Debug, dossier bien ouvert | L’extension n’a pas fini d’analyser | Attendez la fin de la barre de progression en bas à droite ; sinon, palette > Java: Clean Java Language Server Workspace, puis redémarrez |
Error: Could not find or load main class |
Nom de fichier différent du nom de la classe, fichier non enregistré, ou dossier ouvert qui n’est pas celui du .java |
Renommez le fichier en BilanCampagne.java (majuscules comprises), enregistrez, et vérifiez le dossier ouvert |
| Soulignement rouge partout, alors que le code est correct | Le serveur de langage n’a pas démarré ou ne trouve pas de JDK | Palette > Java: Configure Java Runtime et corrigez l’étape 3 |
| Message réclamant un JDK 17 ou plus récent | La version installée de l’extension exige un JDK récent pour elle-même | Installez-le en plus et renseignez java.jdt.ls.java.home (étape 3) |
| Vos réglages JSON semblent sans effet | Le settings.json est invalide (deux objets racine, virgule manquante) |
Cherchez le soulignement rouge dans settings.json et corrigez la structure |
Taux de reussite : 0.0 % |
Le (double) a été perdu à la copie |
Comparez votre ligne avec celle du chapitre |
| Accents illisibles dans le terminal | Encodage de la console Windows | Normal ; gardez les accents hors des chaînes de caractères pour l’instant |
| Le programme ne s’arrête pas au point d’arrêt | Vous avez lancé Run (Ctrl+F5) au lieu de Debug (F5) |
Relancez avec F5 ; la barre d’état doit passer en orange |
| Le point d’arrêt est un cercle creux et grisé | Le débogueur ne peut pas lier cette ligne au code exécuté | Enregistrez le fichier, arrêtez la session, relancez avec F5 |
| Le terminal se ferme immédiatement, sans sortie | Une session de débogage précédente tourne encore | Shift+F5 pour tout arrêter, puis relancez |
En dernier recours : un fichier de lancement explicite
Si le lien Debug reste introuvable, créez à la main un dossier .vscode à la racine de votre dossier de travail, avec dedans un fichier launch.json :
{
"version": "0.2.0",
"configurations": [
{
"type": "java",
"name": "BilanCampagne",
"request": "launch",
"mainClass": "BilanCampagne"
}
]
}
Une configuration nommée BilanCampagne apparaît alors dans le menu déroulant de la vue Exécuter et déboguer. Sélectionnez-la et lancez avec le triangle vert.
Récapitulatif : ce que vous devez pouvoir faire maintenant
Relisez cette liste honnêtement. Chacun de ces points resservira dans tous les chapitres suivants.
java -versionetjavac -versionrépondent tous les deux, en 11.Java: Configure Java Runtimeliste votre JDK 11.BilanCampagnes’exécute et affiche les six lignes attendues,Taux de reussite : 60.0 %compris.- Vous posez un point d’arrêt et vous le retirez sans hésiter.
- Vous lisez la valeur de
reussisdans le panneau VARIABLES pendant que le programme est en pause. - Vous distinguez
F10(passer la ligne) deF5(continuer jusqu’au prochain arrêt). - Vous savez qu’un point d’arrêt s’arrête avant l’exécution de sa ligne.
Ce dernier point est contre-intuitif à la lecture, et évident une fois qu’on l’a vu de ses yeux. C’est précisément pour cela qu’il faut l’avoir fait, et pas seulement lu.
Pour aller un peu plus loin, si vous avez cinq minutes
Avant de commencer, retirez le point d’arrêt conditionnel posé plus haut, ou décochez-le dans le panneau BREAKPOINTS : sa condition i == 2 ne sera plus vraie dans le dernier exercice, et vous croiriez le débogueur en panne.
Modifiez le tableau resultats pour que les cinq cas passent :
boolean[] resultats = { true, true, true, true, true };
Relancez. Vous devez obtenir Taux de reussite : 100.0 % et aucune ligne ECHEC. Puis inversez : les cinq à false, et vérifiez que vous obtenez 0.0 % et cinq lignes ECHEC.
Enfin, essayez un cas que vous n’attendez pas : videz les deux tableaux.
String[] casDeTest = {};
boolean[] resultats = {};
Le programme se termine sur Taux de reussite : NaN %. NaN signifie Not a Number : vous avez divisé zéro par zéro. Posez un point d’arrêt sur la ligne du calcul et regardez total dans le panneau VARIABLES pour le constater. Vous venez de trouver un bug avec le débogueur — c’est exactement le geste que vous répéterez pendant toute la formation.