Cela fait plusieurs années que je trouve contraignant le fait d’avoir à switcher d’une version de Java à une autre, lorsque je travaille sur plusieurs projets ayant des stacks techniques différentes. Il en va de même pour les versions d’autres outils tels que Node.js.
Mes précédents essais m’avaient menés vers SDKMAN, qui n’était pas pleinement compatible avec les outils sur mon espace Windows (terminal et IDE).
Dernièrement, un collègue, Guillaume FAYEMI, a trouvé la solution qui a dépassé mes attentes : mise-en-place (alias mise). C’est une solution open-source, avec plus de 15.4K étoiles sur GitHub, permettant de gérer facilement la mise en place d’une configuration de développement local, sur plusieurs systèmes d’exploitation, dont Windows.
Il permet :
l’installation d’outils tels que Java (des centaines d’autres sont disponibles) ;
la gestion automatique des variables d’environnements ;
la possibilité de lancer des commandes au chargement de la configuration.
Mise en place sur mon poste Windows
Powershell 7+ en pré-requis pour Windows
Pour disposer d’un terminal compatible sous windows, mise nécessite l’installation de la dernière version de Powershell. De mon côté, j’ai opté pour l’installation via winget :
winget search Microsoft.PowerShell
Installation de mise
De la même manière, j’ai installé mise via winget :
winget install jdx.mise
Configuration automatique de mise pour Powershell
Pour activer automatiquement la configuration globale ou locale de mise, il est nécessaire de créer ou mettre à jour le profil du terminal.
Personnellement, j’ai créé un profil “Current User, Current Host” nativement accessible sous $PROFILE
:
New-Item -ItemType File -Path $PROFILE -Force
puis j’ai ajouté la configuration :
Add-Content -Path $PROFILE -Value "# Active Mise pour PowerShell" Add-Content -Path $PROFILE -Value "mise activate pwsh | Out-String | Invoke-Expression | Out-Null"
Vous pouvez visualiser le contenu de la configuration via :
notepad $PROFILE
Comment mise fonctionne
Mise va lire la configuration globale ou locale à l’emplacement courant du terminal puis mettre en place la configuration souhaitée automatiquement. En cas de déplacement dans un autre emplacement, le même processus est rejoué.
La configuration peut se faire manuellement ou en ligne de commande.
Par exemple, il est possible d’installer et de spécifier l’usage pour l’emplacement courant d’un JDK Java Temurin en version 24 via :
mise use java@temurin-24
Cela va :
Installer le dernier JDK Temurin en version 24 s’il n’est pas déjà présent sur la machine ;
Modifier les variables d’environnement,
PATH
etJAVA_HOME
, dans le contexte du terminal ou de l'IDE où la commande a été jouée, pour en faire la version de Java qui y sera utilisée ;Créer un fichier de configuration
mise.toml
à l’emplacement courant du terminal indiquant la configuration à utiliser à cet emplacement.
Ainsi, après avoir joué cette commande, tout usage de la commande java, ou utilisation de Java au travers d’un autre outil tel que Maven ou Gradle, dans ce terminal, ou tout autre terminal se trouvant à cet emplacement, utilisera la version préalablement défini.
Il est possible d’ajouter l’option -g
(pour global) pour en faire la version par défaut, s’il n’y a pas de configuration plus spécifique localement.
Pour visualiser l’ensemble des versions disponibles d’un outil, voici un exemple pour Java en Temurin :
mise ls-remote java | findstr temurin
Pour les versions disponibles en local :
mise ls
Un plugin pour une intégration aux outils JetBrains comme IntelliJ IDEA
Il est possible d’intégrer un plugin Mise, pour que l’environnement se charge automatiquement, au lancement de l’IDE, ou en cas de refresh explicite. Le plugin permet également de pouvoir visualiser à l’instant t
:
les outils actifs avec leur version ;
les tâches à jouer ;
les variables d’environnement spécifiques.
Conclusion
Finalement, l’outil mise remplit très bien son rôle de gestionnaire de versions de Java sur Windows mais il permet bien plus que cela :
une mise en place automatique de la configuration d’un projet quand on se trouve dedans ;
la gestion d’autres outils tels que Node.js ;
la possibilité de gérer également les variables d’environnements et le lancement de scripts.
Top comments (0)