prerequisites – Moba’s built-in Cygwin has apt-cyg; otherwise use the GUI package manager

apt-cyg install curl zip unzip sed

install SDKMAN!

curl -s "https://get.sdkman.io" | bash

Adapt your .Bashrc

# --- SDKMAN & MobaXterm/Cygwin compatibility shim -----------------

if [[ -d "$HOME/.sdkman" ]]; then
  PLATFORM_FILE="$HOME/.sdkman/var/platform"
  TARGET="windowsx64"
  # refresh every shell start in case sdk selfupdate reset it
  [[ ! -f "$PLATFORM_FILE" || "$(cat "$PLATFORM_FILE")" != "$TARGET" ]] &&
      printf '%s\n' "$TARGET" > "$PLATFORM_FILE"
fi
# ------------------------------------------------------------------

Script à copier dans votre /home/mobaxterm

#!/usr/bin/env bash
# ---------------------------------------------------------------------------
# Installe Maven + les JDK majeurs (7 / 8 / 11 / 17 / 21) via SDKMAN!
# Préférence Zulu, menu alternatif si absent.
# À la fin, propose de choisir la version Java par défaut.
# ---------------------------------------------------------------------------
set -eo pipefail               # -u volontairement omis pour la compatibilité SDKMAN!

### 0. Prérequis ---------------------------------------------------------------
for cmd in curl awk grep tr; do
  command -v "$cmd" >/dev/null || { echo "$cmd is required" ; exit 1 ; }
done

### 1. SDKMAN! -----------------------------------------------------------------
if [[ ! -s "$HOME/.sdkman/bin/sdkman-init.sh" ]]; then
  echo "Installing SDKMAN!…"
  curl -s https://get.sdkman.io | bash
fi
# shellcheck source=/dev/null
source "$HOME/.sdkman/bin/sdkman-init.sh"

### 2. Patch platform pour MobaXterm/Cygwin ------------------------------------
[[ "$(uname -s)" == CYGWIN* ]] && echo windowsx64 >"$HOME/.sdkman/var/platform"

### 3. Fonctions utilitaires ----------------------------------------------------
preferred_vendors=(zulu tem kona librca graalce ms oracle)

have() { [[ -d "$HOME/.sdkman/candidates/java/$1" ]]; }

get_available_ids() {           # $1=major
  local major=$1 vendor
  for vendor in "${preferred_vendors[@]}"; do
    sdk list java | awk -F'|' \
      -v maj="${major}\\." -v vend="$vendor" -v dir="$HOME/.sdkman" '
      {
        for(i=1;i<=NF;i++) gsub(/^[ \t]+|[ \t]+$/, "", $i)
        version=$3; dist=$4; status=$5; id=$6
        if(dist==vend && version ~ "^"maj && status!="installed"){
          cmd="test -d \""dir"/candidates/java/"id"\""
          if(system(cmd)!=0) print id
        }
      }' 
  done | awk '!seen[$0]++'
}

install_build() {               # $1=identifier
  yes | sdk install java "$1"
}

choose_id() {                   # $1=major, reste=ids
  local major=$1; shift; local ids=("$@") choice
  echo -e "\n--- Java $major : pas de build Zulu trouvé ---"
  echo "Sélectionnez une distribution (0 = ignorer) :"
  select choice in "${ids[@]}"; do
    [[ $REPLY =~ ^[0-9]+$ ]] || { echo "Entrez un nombre." ; continue ; }
    [[ $REPLY == 0 ]] && echo "" && return
    [[ -n $choice ]] && echo "$choice" && return
  done
}

### 4. Boucle d’installation ----------------------------------------------------
declare -a installed_ids        # pour proposer le choix final
majors=(7 8 11 17 21)

for major in "${majors[@]}"; do
  # 4a. déjà présent ?
  installed=$(sdk list java | awk -F'|' -v maj="${major}\\." '
    $0 ~ /^[[:space:]]/ {
      for(i=1;i<=NF;i++) gsub(/^[ \t]+|[ \t]+$/, "", $i)
      if($3 ~ "^"maj && $5=="installed"){ print $6 ; exit }
    }')
  if [[ -n $installed ]] || have "*-${major}" ; then
    echo "✓  Java $major déjà installé ($installed) – ignoré."
    installed_ids+=("$installed")
    continue
  fi

  # 4b. builds disponibles
  mapfile -t ids < <(get_available_ids "$major")
  if [[ ${#ids[@]} -eq 0 ]]; then
    echo "⚠  Aucun build disponible pour Java $major."
    continue
  fi

  # 4c. priorité Zulu, sinon menu
  zulu=""
  for id in "${ids[@]}"; do [[ $id == *"-zulu" ]] && { zulu=$id; break; }; done
  if [[ -n $zulu ]]; then
    echo "➡  Installation du dernier Zulu Java $major ($zulu)…"
    install_build "$zulu"
    installed_ids+=("$zulu")
  else
    selected=$(choose_id "$major" "${ids[@]}")
    if [[ -n $selected ]]; then
      echo "➡  Installation de $selected…"
      install_build "$selected"
      installed_ids+=("$selected")
    else
      echo "⏭  Java $major ignoré."
    fi
  fi
done

### 5. Maven --------------------------------------------------------------------
if ! sdk current maven >/dev/null 2>&1; then
  echo -e "\n➡  Installation de Maven…"
  yes | sdk install maven
else
  echo -e "\n✓  Maven déjà installé."
fi

### 6. Choix de la version Java par défaut -------------------------------------
echo -e "\n--- Sélection de la version Java par défaut ------------------------"
PS3="Numéro (0 = ne rien changer) : "
select def in "${installed_ids[@]}"; do
  [[ $REPLY =~ ^[0-9]+$ ]] || { echo "Entrez un nombre." ; continue ; }
  if [[ $REPLY == 0 ]]; then
    echo "⏭  Aucun changement de version courante."
  elif [[ -n $def ]]; then
    sdk default java "$def" || true   # code 1 inoffensif
    echo "✓  $def est maintenant la version par défaut."
  fi
  break
done

# Exporte JAVA_HOME pour la session actuelle
export JAVA_HOME="$HOME/.sdkman/candidates/java/current"
export PATH="$JAVA_HOME/bin:$PATH"

### 7. Persistance JAVA_HOME ----------------------------------------------------
if ! grep -q 'export JAVA_HOME=.*\.sdkman' "$HOME/.bashrc" 2>/dev/null; then
cat >>"$HOME/.bashrc" <<'EOF'

# --- SDKMAN! Java/Maven (auto-ajout) ------------------------------------------
export JAVA_HOME="$HOME/.sdkman/candidates/java/current"
export PATH="\$JAVA_HOME/bin:\$PATH"
# -----------------------------------------------------------------------------#
EOF
  echo "ℹ  JAVA_HOME ajouté à ~/.bashrc"
fi

### 8. Résumé ------------------------------------------------------------------
echo -e "\nÉtat actuel :"
sdk current
echo -e "\n✅  Installation terminée."
``````shvi install_java_stack.sh
chmod +x install_java_stack.sh
```# Installer les Java versions
```sh
./install_java_stack.sh
  11/07/2025   16:09.24   /home/mobaxterm  ./install_java_stack.sh
✓  Java 7 déjà installé (7.0.352-zulu) – ignoré.
✓  Java 8 déjà installé (8.0.452.fx-zulu) – ignoré.
✓  Java 11 déjà installé (11.0.27.fx-zulu) – ignoré.
✓  Java 17 déjà installé (17.0.15.fx-zulu) – ignoré.
✓  Java 21 déjà installé (21.0.7.fx-zulu) – ignoré.

✓  Maven déjà installé.

--- Sélection de la version Java par défaut ------------------------
1) 7.0.352-zulu     3) 11.0.27.fx-zulu  5) 21.0.7.fx-zulu
2) 8.0.452.fx-zulu  4) 17.0.15.fx-zulu
Numéro (0 = ne rien changer) : 0
⏭  Aucun changement de version courante.

État actuel :

Using:

java: 17.0.15.fx-zulu
maven: 3.9.10

✅  Installation terminée.