From 2a9ef663dd373874fb80a3940c0fed1a4420e088 Mon Sep 17 00:00:00 2001
From: wenytang-ms <wenyutang@microsoft.com>
Date: Wed, 29 Jul 2026 17:41:25 +0800
Subject: [PATCH 1/3] build: resolve maven artifacts through the CFS feed

SFI Network Isolation requires builds to stop reaching public package hosts,
and Maven is the last source of egress from these pipelines now that npm has
moved. Two independent paths reach repo.maven.apache.org: artifact resolution,
and the wrapper's download of the Maven distribution -- which happens before
Maven exists, so no settings file can influence it.

Both are closed with configuration Maven and its wrapper already understand,
declared as pipeline variables so they reach every step in the job. That last
part matters: these builds never name Maven on a command line, they start it
from an npm script, so there is nowhere to add a flag.

MAVEN_ARGS points Maven at a committed settings.xml carrying the mirror and
its credential. The mirror is scoped to `central` rather than `external:*`
because Tycho resolves p2 repositories through the same configuration and the
feed cannot serve p2. MVNW_REPOURL substitutes the host in distributionUrl,
which is why the wrapper properties still name the public host and need no
edit at all.

MVNW_REPOURL requires the Apache wrapper -- the Takari one bundled here reads
the URL only from the properties file and honours no override -- so it is
replaced by the script-only distribution of Apache maven-wrapper 3.3.3, which
also removes maven-wrapper.jar from the tree. 3.3.3 and not 3.3.2 because the
latter selects the mvnd path pattern for non-mvnd builds on Windows and
produces a malformed URL.

This replaces an earlier attempt that had a pipeline step rewrite the user
settings.xml and the tracked wrapper properties. It needed to locate the JVM's
user.home, edit XML that another task had just written, and leave the checkout
dirty. None of that is necessary.

Nothing here changes a local build: MAVEN_ARGS and MVNW_* are set only on the
agents, so ./mvnw keeps using the developer's own settings and the public
central. If either variable were missing, the build fails against an unusable
repository rather than quietly falling back to the public host.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: ac225268-483d-4498-a08f-fe79a87d4d2e
---
 .azure-pipelines/cfs-settings.xml             |  40 ++
 .azure-pipelines/ci.yml                       |   1 +
 .azure-pipelines/maven-cfs-variables.yml      |  47 +++
 .azure-pipelines/nightly.yml                  |   8 +
 .azure-pipelines/rc.yml                       |   8 +
 jdtls.ext/.mvn/wrapper/maven-wrapper.jar      | Bin 47774 -> 0 bytes
 .../.mvn/wrapper/maven-wrapper.properties     |   2 +-
 jdtls.ext/mvnw                                | 394 ++++++++++--------
 jdtls.ext/mvnw.cmd                            | 284 +++++++------
 9 files changed, 501 insertions(+), 283 deletions(-)
 create mode 100644 .azure-pipelines/cfs-settings.xml
 create mode 100644 .azure-pipelines/maven-cfs-variables.yml
 delete mode 100644 jdtls.ext/.mvn/wrapper/maven-wrapper.jar

diff --git a/.azure-pipelines/cfs-settings.xml b/.azure-pipelines/cfs-settings.xml
new file mode 100644
index 00000000..e5dc4e42
--- /dev/null
+++ b/.azure-pipelines/cfs-settings.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Maven settings for the build pipelines in this directory. SFI Network Isolation
+  requires builds to resolve artifacts through the Central Feed Service (CFS) instead
+  of reaching a public host, and this file is the artifact-resolution half of that.
+
+  It is applied through MAVEN_ARGS rather than by passing -s at each call site; see
+  maven-cfs-variables.yml for why. Because MAVEN_ARGS is set only on the build agents,
+  a developer running ./mvnw locally is unaffected and keeps using their own settings.
+
+  The mirror is scoped to `central` rather than `external:*` deliberately. Tycho
+  resolves p2 repositories through the same mirror configuration, and CFS cannot serve
+  p2, so a wildcard mirror would break target platform resolution.
+
+  The two ids must stay equal: that pairing is how Maven attaches the credential to
+  the mirror. Neither value below is a secret. The URL is a feed address, and the
+  password is an environment reference that is only resolved on the agent. If either
+  variable is missing the build fails against an unusable repository rather than
+  quietly falling back to the public central, which is the outcome this change exists
+  to prevent.
+-->
+<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
+          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">
+  <mirrors>
+    <mirror>
+      <id>vscjava</id>
+      <name>Central Feed Service</name>
+      <url>${env.CFS_MAVEN_URL}</url>
+      <mirrorOf>central</mirrorOf>
+    </mirror>
+  </mirrors>
+  <servers>
+    <server>
+      <id>vscjava</id>
+      <username>AzureDevOps</username>
+      <password>${env.SYSTEM_ACCESSTOKEN}</password>
+    </server>
+  </servers>
+</settings>
diff --git a/.azure-pipelines/ci.yml b/.azure-pipelines/ci.yml
index 15fbc937..a7462b2d 100644
--- a/.azure-pipelines/ci.yml
+++ b/.azure-pipelines/ci.yml
@@ -3,6 +3,7 @@ variables:
   - name: Codeql.Enabled
     value: true
   - template: /.azure-pipelines/npm-cfs-variables.yml@self
+  - template: /.azure-pipelines/maven-cfs-variables.yml@self
 resources:
   repositories:
     - repository: self
diff --git a/.azure-pipelines/maven-cfs-variables.yml b/.azure-pipelines/maven-cfs-variables.yml
new file mode 100644
index 00000000..11ab65de
--- /dev/null
+++ b/.azure-pipelines/maven-cfs-variables.yml
@@ -0,0 +1,47 @@
+# Variables that route Maven through the Central Feed Service (CFS), as required by
+# SFI Network Isolation. Consumed by every pipeline in this directory that builds the
+# Java side of the extension:
+#
+#   variables:
+#     - template: /.azure-pipelines/maven-cfs-variables.yml@self
+#
+# There is deliberately no companion steps template. Everything the redirect needs is
+# already understood by Maven and its wrapper as environment variables, so no task has
+# to rewrite a settings file and nothing in the checked-out tree is modified. Pipeline
+# variables are exported to every step in the job, which is what makes this work for
+# the Maven runs these builds start indirectly -- from an npm script or a gulp task --
+# and never name on a command line of their own.
+#
+# The one thing that cannot live here is the credential. System.AccessToken is a
+# secret, and secret variables are not exported to the environment, not even through
+# a variable that merely references one. It is therefore mapped with `env:` on the
+# steps that run Maven; grep for MVNW_PASSWORD to find them. That also keeps the token
+# out of the environment of every unrelated task in the job.
+#
+# Two independent egress paths have to be closed, and only the first is obvious.
+variables:
+  # The feed's maven/v1 endpoint, read by cfs-settings.xml and by the wrapper below.
+  # Committing it matches npm-cfs-variables.yml: a feed address is not a secret, and
+  # the token that makes it usable never leaves the agent.
+  - name: CFS_MAVEN_URL
+    value: https://pkgs.dev.azure.com/mseng/VSJava/_packaging/vscjava/maven/v1
+
+  # Path one: artifact resolution. The `mvn` launcher prepends MAVEN_ARGS to every
+  # invocation, so build scripts keep calling `mvnw` with no extra flags of their own.
+  # Supported by Maven 3.9 and newer, which is what the wrapper here pins.
+  - name: MAVEN_ARGS
+    value: -s $(Build.SourcesDirectory)/.azure-pipelines/cfs-settings.xml
+
+  # Path two: the Maven distribution itself. The wrapper downloads it from
+  # distributionUrl before Maven exists, so settings.xml cannot influence that request.
+  # MVNW_REPOURL substitutes everything ahead of /org/apache/maven/ in that URL, which
+  # is why .mvn/wrapper/maven-wrapper.properties still names the public host and needs
+  # no edit: contributors keep a wrapper that works, agents resolve it from the feed.
+  #
+  # The wrapper ignores both of these unless MVNW_PASSWORD is also set, which happens
+  # on the Maven steps; with no credential it would fall back to an unauthenticated
+  # fetch and fail on 401 rather than reach a public host.
+  - name: MVNW_REPOURL
+    value: $(CFS_MAVEN_URL)
+  - name: MVNW_USERNAME
+    value: AzureDevOps
diff --git a/.azure-pipelines/nightly.yml b/.azure-pipelines/nightly.yml
index d7e8461f..a1ee16a2 100644
--- a/.azure-pipelines/nightly.yml
+++ b/.azure-pipelines/nightly.yml
@@ -3,6 +3,7 @@ variables:
   - name: Codeql.Enabled
     value: true
   - template: /.azure-pipelines/npm-cfs-variables.yml@self
+  - template: /.azure-pipelines/maven-cfs-variables.yml@self
 schedules:
   - cron: 0 0 * * *
     branches:
@@ -73,6 +74,13 @@ extends:
                 displayName: npm install
               - task: CmdLine@2
                 displayName: npx gulp build_server
+                # System.AccessToken is a secret, and Azure Pipelines does not export secret
+                # variables to the environment -- not even through a variable that merely
+                # references one. It is mapped here, on the step that actually runs Maven,
+                # rather than in maven-cfs-variables.yml alongside the rest of the wiring.
+                env:
+                  SYSTEM_ACCESSTOKEN: $(System.AccessToken)
+                  MVNW_PASSWORD: $(System.AccessToken)
                 inputs:
                   targetType: inline
                   script: |-
diff --git a/.azure-pipelines/rc.yml b/.azure-pipelines/rc.yml
index 00e1bb62..59286c81 100644
--- a/.azure-pipelines/rc.yml
+++ b/.azure-pipelines/rc.yml
@@ -3,6 +3,7 @@ variables:
   - name: Codeql.Enabled
     value: true
   - template: /.azure-pipelines/npm-cfs-variables.yml@self
+  - template: /.azure-pipelines/maven-cfs-variables.yml@self
 resources:
   repositories:
     - repository: self
@@ -68,6 +69,13 @@ extends:
                 displayName: npm install
               - task: CmdLine@2
                 displayName: npx gulp build_server
+                # System.AccessToken is a secret, and Azure Pipelines does not export secret
+                # variables to the environment -- not even through a variable that merely
+                # references one. It is mapped here, on the step that actually runs Maven,
+                # rather than in maven-cfs-variables.yml alongside the rest of the wiring.
+                env:
+                  SYSTEM_ACCESSTOKEN: $(System.AccessToken)
+                  MVNW_PASSWORD: $(System.AccessToken)
                 inputs:
                   targetType: inline
                   script: |-
diff --git a/jdtls.ext/.mvn/wrapper/maven-wrapper.jar b/jdtls.ext/.mvn/wrapper/maven-wrapper.jar
deleted file mode 100644
index 41c70a7e0b7da7ecbbcf53b62aacdf8bc81e10b0..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 47774
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%0AX2ie0112hE2F+0;RM+^p
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
Be7*nx

diff --git a/jdtls.ext/.mvn/wrapper/maven-wrapper.properties b/jdtls.ext/.mvn/wrapper/maven-wrapper.properties
index 9e0264d0..0786e61c 100644
--- a/jdtls.ext/.mvn/wrapper/maven-wrapper.properties
+++ b/jdtls.ext/.mvn/wrapper/maven-wrapper.properties
@@ -1 +1 @@
-distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.3/apache-maven-3.9.3-bin.zip
\ No newline at end of file
+distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.3/apache-maven-3.9.3-bin.zip
diff --git a/jdtls.ext/mvnw b/jdtls.ext/mvnw
index e96ccd5f..e9cf8d33 100755
--- a/jdtls.ext/mvnw
+++ b/jdtls.ext/mvnw
@@ -19,209 +19,277 @@
 # ----------------------------------------------------------------------------
 
 # ----------------------------------------------------------------------------
-# Maven2 Start Up Batch script
-#
-# Required ENV vars:
-# ------------------
-#   JAVA_HOME - location of a JDK home dir
+# Apache Maven Wrapper startup batch script, version 3.3.3
 #
 # Optional ENV vars
 # -----------------
-#   M2_HOME - location of maven2's installed home dir
-#   MAVEN_OPTS - parameters passed to the Java VM when running Maven
-#     e.g. to debug Maven itself, use
-#       set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
-#   MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+#   JAVA_HOME - location of a JDK home dir, required when download maven via java source
+#   MVNW_REPOURL - repo url base for downloading maven distribution
+#   MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven
+#   MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output
 # ----------------------------------------------------------------------------
 
-if [ -z "$MAVEN_SKIP_RC" ] ; then
-
-  if [ -f /etc/mavenrc ] ; then
-    . /etc/mavenrc
-  fi
+set -euf
+[ "${MVNW_VERBOSE-}" != debug ] || set -x
 
-  if [ -f "$HOME/.mavenrc" ] ; then
-    . "$HOME/.mavenrc"
-  fi
+# OS specific support.
+native_path() { printf %s\\n "$1"; }
+case "$(uname)" in
+CYGWIN* | MINGW*)
+  [ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")"
+  native_path() { cygpath --path --windows "$1"; }
+  ;;
+esac
 
-fi
+# set JAVACMD and JAVACCMD
+set_java_home() {
+  # For Cygwin and MinGW, ensure paths are in Unix format before anything is touched
+  if [ -n "${JAVA_HOME-}" ]; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ]; then
+      # IBM's JDK on AIX uses strange locations for the executables
+      JAVACMD="$JAVA_HOME/jre/sh/java"
+      JAVACCMD="$JAVA_HOME/jre/sh/javac"
+    else
+      JAVACMD="$JAVA_HOME/bin/java"
+      JAVACCMD="$JAVA_HOME/bin/javac"
 
-# OS specific support.  $var _must_ be set to either true or false.
-cygwin=false;
-darwin=false;
-mingw=false
-case "`uname`" in
-  CYGWIN*) cygwin=true ;;
-  MINGW*) mingw=true;;
-  Darwin*) darwin=true
-    # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
-    # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
-    if [ -z "$JAVA_HOME" ]; then
-      if [ -x "/usr/libexec/java_home" ]; then
-        export JAVA_HOME="`/usr/libexec/java_home`"
-      else
-        export JAVA_HOME="/Library/Java/Home"
+      if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then
+        echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2
+        echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2
+        return 1
       fi
     fi
-    ;;
-esac
+  else
+    JAVACMD="$(
+      'set' +e
+      'unset' -f command 2>/dev/null
+      'command' -v java
+    )" || :
+    JAVACCMD="$(
+      'set' +e
+      'unset' -f command 2>/dev/null
+      'command' -v javac
+    )" || :
 
-if [ -z "$JAVA_HOME" ] ; then
-  if [ -r /etc/gentoo-release ] ; then
-    JAVA_HOME=`java-config --jre-home`
+    if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then
+      echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2
+      return 1
+    fi
   fi
-fi
-
-if [ -z "$M2_HOME" ] ; then
-  ## resolve links - $0 may be a link to maven's home
-  PRG="$0"
+}
 
-  # need this for relative symlinks
-  while [ -h "$PRG" ] ; do
-    ls=`ls -ld "$PRG"`
-    link=`expr "$ls" : '.*-> \(.*\)$'`
-    if expr "$link" : '/.*' > /dev/null; then
-      PRG="$link"
-    else
-      PRG="`dirname "$PRG"`/$link"
-    fi
+# hash string like Java String::hashCode
+hash_string() {
+  str="${1:-}" h=0
+  while [ -n "$str" ]; do
+    char="${str%"${str#?}"}"
+    h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296))
+    str="${str#?}"
   done
+  printf %x\\n $h
+}
+
+verbose() { :; }
+[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; }
 
-  saveddir=`pwd`
+die() {
+  printf %s\\n "$1" >&2
+  exit 1
+}
+
+trim() {
+  # MWRAPPER-139:
+  #   Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds.
+  #   Needed for removing poorly interpreted newline sequences when running in more
+  #   exotic environments such as mingw bash on Windows.
+  printf "%s" "${1}" | tr -d '[:space:]'
+}
+
+scriptDir="$(dirname "$0")"
+scriptName="$(basename "$0")"
+
+# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties
+while IFS="=" read -r key value; do
+  case "${key-}" in
+  distributionUrl) distributionUrl=$(trim "${value-}") ;;
+  distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;;
+  esac
+done <"$scriptDir/.mvn/wrapper/maven-wrapper.properties"
+[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties"
+
+case "${distributionUrl##*/}" in
+maven-mvnd-*bin.*)
+  MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/
+  case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in
+  *AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;;
+  :Darwin*x86_64) distributionPlatform=darwin-amd64 ;;
+  :Darwin*arm64) distributionPlatform=darwin-aarch64 ;;
+  :Linux*x86_64*) distributionPlatform=linux-amd64 ;;
+  *)
+    echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2
+    distributionPlatform=linux-amd64
+    ;;
+  esac
+  distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip"
+  ;;
+maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;;
+*) MVN_CMD="mvn${scriptName#mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;;
+esac
 
-  M2_HOME=`dirname "$PRG"`/..
+# apply MVNW_REPOURL and calculate MAVEN_HOME
+# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-<version>,maven-mvnd-<version>-<platform>}/<hash>
+[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}"
+distributionUrlName="${distributionUrl##*/}"
+distributionUrlNameMain="${distributionUrlName%.*}"
+distributionUrlNameMain="${distributionUrlNameMain%-bin}"
+MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}"
+MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")"
 
-  # make it fully qualified
-  M2_HOME=`cd "$M2_HOME" && pwd`
+exec_maven() {
+  unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || :
+  exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD"
+}
 
-  cd "$saveddir"
-  # echo Using m2 at $M2_HOME
+if [ -d "$MAVEN_HOME" ]; then
+  verbose "found existing MAVEN_HOME at $MAVEN_HOME"
+  exec_maven "$@"
 fi
 
-# For Cygwin, ensure paths are in UNIX format before anything is touched
-if $cygwin ; then
-  [ -n "$M2_HOME" ] &&
-    M2_HOME=`cygpath --unix "$M2_HOME"`
-  [ -n "$JAVA_HOME" ] &&
-    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
-  [ -n "$CLASSPATH" ] &&
-    CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
+case "${distributionUrl-}" in
+*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;;
+*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;;
+esac
+
+# prepare tmp dir
+if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then
+  clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; }
+  trap clean HUP INT TERM EXIT
+else
+  die "cannot create temp dir"
 fi
 
-# For Mingw, ensure paths are in UNIX format before anything is touched
-if $mingw ; then
-  [ -n "$M2_HOME" ] &&
-    M2_HOME="`(cd "$M2_HOME"; pwd)`"
-  [ -n "$JAVA_HOME" ] &&
-    JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
-  # TODO classpath?
+mkdir -p -- "${MAVEN_HOME%/*}"
+
+# Download and Install Apache Maven
+verbose "Couldn't find MAVEN_HOME, downloading and installing it ..."
+verbose "Downloading from: $distributionUrl"
+verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName"
+
+# select .zip or .tar.gz
+if ! command -v unzip >/dev/null; then
+  distributionUrl="${distributionUrl%.zip}.tar.gz"
+  distributionUrlName="${distributionUrl##*/}"
 fi
 
-if [ -z "$JAVA_HOME" ]; then
-  javaExecutable="`which javac`"
-  if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
-    # readlink(1) is not available as standard on Solaris 10.
-    readLink=`which readlink`
-    if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
-      if $darwin ; then
-        javaHome="`dirname \"$javaExecutable\"`"
-        javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
-      else
-        javaExecutable="`readlink -f \"$javaExecutable\"`"
-      fi
-      javaHome="`dirname \"$javaExecutable\"`"
-      javaHome=`expr "$javaHome" : '\(.*\)/bin'`
-      JAVA_HOME="$javaHome"
-      export JAVA_HOME
-    fi
-  fi
+# verbose opt
+__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR=''
+[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v
+
+# normalize http auth
+case "${MVNW_PASSWORD:+has-password}" in
+'') MVNW_USERNAME='' MVNW_PASSWORD='' ;;
+has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;;
+esac
+
+if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then
+  verbose "Found wget ... using wget"
+  wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl"
+elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then
+  verbose "Found curl ... using curl"
+  curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl"
+elif set_java_home; then
+  verbose "Falling back to use Java to download"
+  javaSource="$TMP_DOWNLOAD_DIR/Downloader.java"
+  targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName"
+  cat >"$javaSource" <<-END
+	public class Downloader extends java.net.Authenticator
+	{
+	  protected java.net.PasswordAuthentication getPasswordAuthentication()
+	  {
+	    return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() );
+	  }
+	  public static void main( String[] args ) throws Exception
+	  {
+	    setDefault( new Downloader() );
+	    java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() );
+	  }
+	}
+	END
+  # For Cygwin/MinGW, switch paths to Windows format before running javac and java
+  verbose " - Compiling Downloader.java ..."
+  "$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java"
+  verbose " - Running Downloader.java ..."
+  "$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")"
 fi
 
-if [ -z "$JAVACMD" ] ; then
-  if [ -n "$JAVA_HOME"  ] ; then
-    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
-      # IBM's JDK on AIX uses strange locations for the executables
-      JAVACMD="$JAVA_HOME/jre/sh/java"
-    else
-      JAVACMD="$JAVA_HOME/bin/java"
+# If specified, validate the SHA-256 sum of the Maven distribution zip file
+if [ -n "${distributionSha256Sum-}" ]; then
+  distributionSha256Result=false
+  if [ "$MVN_CMD" = mvnd.sh ]; then
+    echo "Checksum validation is not supported for maven-mvnd." >&2
+    echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2
+    exit 1
+  elif command -v sha256sum >/dev/null; then
+    if echo "$distributionSha256Sum  $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c - >/dev/null 2>&1; then
+      distributionSha256Result=true
+    fi
+  elif command -v shasum >/dev/null; then
+    if echo "$distributionSha256Sum  $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then
+      distributionSha256Result=true
     fi
   else
-    JAVACMD="`which java`"
+    echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2
+    echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2
+    exit 1
+  fi
+  if [ $distributionSha256Result = false ]; then
+    echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2
+    echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2
+    exit 1
   fi
 fi
 
-if [ ! -x "$JAVACMD" ] ; then
-  echo "Error: JAVA_HOME is not defined correctly." >&2
-  echo "  We cannot execute $JAVACMD" >&2
-  exit 1
-fi
-
-if [ -z "$JAVA_HOME" ] ; then
-  echo "Warning: JAVA_HOME environment variable is not set."
+# unzip and move
+if command -v unzip >/dev/null; then
+  unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip"
+else
+  tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar"
 fi
 
-CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
-
-# traverses directory structure from process work directory to filesystem root
-# first directory with .mvn subdirectory is considered project base directory
-find_maven_basedir() {
+# Find the actual extracted directory name (handles snapshots where filename != directory name)
+actualDistributionDir=""
 
-  if [ -z "$1" ]
-  then
-    echo "Path not specified to find_maven_basedir"
-    return 1
+# First try the expected directory name (for regular distributions)
+if [ -d "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" ]; then
+  if [ -f "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/bin/$MVN_CMD" ]; then
+    actualDistributionDir="$distributionUrlNameMain"
   fi
+fi
 
-  basedir="$1"
-  wdir="$1"
-  while [ "$wdir" != '/' ] ; do
-    if [ -d "$wdir"/.mvn ] ; then
-      basedir=$wdir
-      break
-    fi
-    # workaround for JBEAP-8937 (on Solaris 10/Sparc)
-    if [ -d "${wdir}" ]; then
-      wdir=`cd "$wdir/.."; pwd`
+# If not found, search for any directory with the Maven executable (for snapshots)
+if [ -z "$actualDistributionDir" ]; then
+  # enable globbing to iterate over items
+  set +f
+  for dir in "$TMP_DOWNLOAD_DIR"/*; do
+    if [ -d "$dir" ]; then
+      if [ -f "$dir/bin/$MVN_CMD" ]; then
+        actualDistributionDir="$(basename "$dir")"
+        break
+      fi
     fi
-    # end of workaround
   done
-  echo "${basedir}"
-}
-
-# concatenates all lines of a file
-concat_lines() {
-  if [ -f "$1" ]; then
-    echo "$(tr -s '\n' ' ' < "$1")"
-  fi
-}
-
-BASE_DIR=`find_maven_basedir "$(pwd)"`
-if [ -z "$BASE_DIR" ]; then
-  exit 1;
+  set -f
 fi
 
-export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
-if [ "$MVNW_VERBOSE" = true ]; then
-  echo $MAVEN_PROJECTBASEDIR
-fi
-MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
-
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin; then
-  [ -n "$M2_HOME" ] &&
-    M2_HOME=`cygpath --path --windows "$M2_HOME"`
-  [ -n "$JAVA_HOME" ] &&
-    JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
-  [ -n "$CLASSPATH" ] &&
-    CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
-  [ -n "$MAVEN_PROJECTBASEDIR" ] &&
-    MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
+if [ -z "$actualDistributionDir" ]; then
+  verbose "Contents of $TMP_DOWNLOAD_DIR:"
+  verbose "$(ls -la "$TMP_DOWNLOAD_DIR")"
+  die "Could not find Maven distribution directory in extracted archive"
 fi
 
-WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+verbose "Found extracted Maven distribution directory: $actualDistributionDir"
+printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$actualDistributionDir/mvnw.url"
+mv -- "$TMP_DOWNLOAD_DIR/$actualDistributionDir" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME"
 
-exec "$JAVACMD" \
-  $MAVEN_OPTS \
-  -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
-  "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
-  ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
+clean || :
+exec_maven "$@"
diff --git a/jdtls.ext/mvnw.cmd b/jdtls.ext/mvnw.cmd
index 019bd74d..2e2dbe03 100644
--- a/jdtls.ext/mvnw.cmd
+++ b/jdtls.ext/mvnw.cmd
@@ -1,3 +1,4 @@
+<# : batch portion
 @REM ----------------------------------------------------------------------------
 @REM Licensed to the Apache Software Foundation (ASF) under one
 @REM or more contributor license agreements.  See the NOTICE file
@@ -18,126 +19,171 @@
 @REM ----------------------------------------------------------------------------
 
 @REM ----------------------------------------------------------------------------
-@REM Maven2 Start Up Batch script
-@REM
-@REM Required ENV vars:
-@REM JAVA_HOME - location of a JDK home dir
+@REM Apache Maven Wrapper startup batch script, version 3.3.3
 @REM
 @REM Optional ENV vars
-@REM M2_HOME - location of maven2's installed home dir
-@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
-@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending
-@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
-@REM     e.g. to debug Maven itself, use
-@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
-@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+@REM   MVNW_REPOURL - repo url base for downloading maven distribution
+@REM   MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven
+@REM   MVNW_VERBOSE - true: enable verbose log; others: silence the output
 @REM ----------------------------------------------------------------------------
 
-@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
-@echo off
-@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on'
-@if "%MAVEN_BATCH_ECHO%" == "on"  echo %MAVEN_BATCH_ECHO%
-
-@REM set %HOME% to equivalent of $HOME
-if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
-
-@REM Execute a user defined script before this one
-if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
-@REM check for pre script, once with legacy .bat ending and once with .cmd ending
-if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
-if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
-:skipRcPre
-
-@setlocal
-
-set ERROR_CODE=0
-
-@REM To isolate internal variables from possible post scripts, we use another setlocal
-@setlocal
-
-@REM ==== START VALIDATION ====
-if not "%JAVA_HOME%" == "" goto OkJHome
-
-echo.
-echo Error: JAVA_HOME not found in your environment. >&2
-echo Please set the JAVA_HOME variable in your environment to match the >&2
-echo location of your Java installation. >&2
-echo.
-goto error
-
-:OkJHome
-if exist "%JAVA_HOME%\bin\java.exe" goto init
-
-echo.
-echo Error: JAVA_HOME is set to an invalid directory. >&2
-echo JAVA_HOME = "%JAVA_HOME%" >&2
-echo Please set the JAVA_HOME variable in your environment to match the >&2
-echo location of your Java installation. >&2
-echo.
-goto error
-
-@REM ==== END VALIDATION ====
-
-:init
-
-@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
-@REM Fallback to current working directory if not found.
-
-set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
-IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
-
-set EXEC_DIR=%CD%
-set WDIR=%EXEC_DIR%
-:findBaseDir
-IF EXIST "%WDIR%"\.mvn goto baseDirFound
-cd ..
-IF "%WDIR%"=="%CD%" goto baseDirNotFound
-set WDIR=%CD%
-goto findBaseDir
-
-:baseDirFound
-set MAVEN_PROJECTBASEDIR=%WDIR%
-cd "%EXEC_DIR%"
-goto endDetectBaseDir
-
-:baseDirNotFound
-set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
-cd "%EXEC_DIR%"
-
-:endDetectBaseDir
-
-IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
-
-@setlocal EnableExtensions EnableDelayedExpansion
-for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
-@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
-
-:endReadAdditionalConfig
-
-SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
-
-set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
-set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
-
-%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
-if ERRORLEVEL 1 goto error
-goto end
-
-:error
-set ERROR_CODE=1
-
-:end
-@endlocal & set ERROR_CODE=%ERROR_CODE%
-
-if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
-@REM check for post script, once with legacy .bat ending and once with .cmd ending
-if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
-if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
-:skipRcPost
-
-@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
-if "%MAVEN_BATCH_PAUSE%" == "on" pause
-
-if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
-
-exit /B %ERROR_CODE%
+@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0)
+@SET __MVNW_CMD__=
+@SET __MVNW_ERROR__=
+@SET __MVNW_PSMODULEP_SAVE=%PSModulePath%
+@SET PSModulePath=
+@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @(
+  IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B)
+)
+@SET PSModulePath=%__MVNW_PSMODULEP_SAVE%
+@SET __MVNW_PSMODULEP_SAVE=
+@SET __MVNW_ARG0_NAME__=
+@SET MVNW_USERNAME=
+@SET MVNW_PASSWORD=
+@IF NOT "%__MVNW_CMD__%"=="" ("%__MVNW_CMD__%" %*)
+@echo Cannot start maven from wrapper >&2 && exit /b 1
+@GOTO :EOF
+: end batch / begin powershell #>
+
+$ErrorActionPreference = "Stop"
+if ($env:MVNW_VERBOSE -eq "true") {
+  $VerbosePreference = "Continue"
+}
+
+# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties
+$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl
+if (!$distributionUrl) {
+  Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties"
+}
+
+switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) {
+  "maven-mvnd-*" {
+    $USE_MVND = $true
+    $distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip"
+    $MVN_CMD = "mvnd.cmd"
+    break
+  }
+  default {
+    $USE_MVND = $false
+    $MVN_CMD = $script -replace '^mvnw','mvn'
+    break
+  }
+}
+
+# apply MVNW_REPOURL and calculate MAVEN_HOME
+# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-<version>,maven-mvnd-<version>-<platform>}/<hash>
+if ($env:MVNW_REPOURL) {
+  $MVNW_REPO_PATTERN = if ($USE_MVND -eq $False) { "/org/apache/maven/" } else { "/maven/mvnd/" }
+  $distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace "^.*$MVNW_REPO_PATTERN",'')"
+}
+$distributionUrlName = $distributionUrl -replace '^.*/',''
+$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$',''
+
+$MAVEN_M2_PATH = "$HOME/.m2"
+if ($env:MAVEN_USER_HOME) {
+  $MAVEN_M2_PATH = "$env:MAVEN_USER_HOME"
+}
+
+if (-not (Test-Path -Path $MAVEN_M2_PATH)) {
+    New-Item -Path $MAVEN_M2_PATH -ItemType Directory | Out-Null
+}
+
+$MAVEN_WRAPPER_DISTS = $null
+if ((Get-Item $MAVEN_M2_PATH).Target[0] -eq $null) {
+  $MAVEN_WRAPPER_DISTS = "$MAVEN_M2_PATH/wrapper/dists"
+} else {
+  $MAVEN_WRAPPER_DISTS = (Get-Item $MAVEN_M2_PATH).Target[0] + "/wrapper/dists"
+}
+
+$MAVEN_HOME_PARENT = "$MAVEN_WRAPPER_DISTS/$distributionUrlNameMain"
+$MAVEN_HOME_NAME = ([System.Security.Cryptography.SHA256]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join ''
+$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME"
+
+if (Test-Path -Path "$MAVEN_HOME" -PathType Container) {
+  Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME"
+  Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD"
+  exit $?
+}
+
+if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) {
+  Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl"
+}
+
+# prepare tmp dir
+$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile
+$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir"
+$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null
+trap {
+  if ($TMP_DOWNLOAD_DIR.Exists) {
+    try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null }
+    catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" }
+  }
+}
+
+New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null
+
+# Download and Install Apache Maven
+Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..."
+Write-Verbose "Downloading from: $distributionUrl"
+Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName"
+
+$webclient = New-Object System.Net.WebClient
+if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) {
+  $webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD)
+}
+[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
+$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null
+
+# If specified, validate the SHA-256 sum of the Maven distribution zip file
+$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum
+if ($distributionSha256Sum) {
+  if ($USE_MVND) {
+    Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties."
+  }
+  Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash
+  if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) {
+    Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property."
+  }
+}
+
+# unzip and move
+Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null
+
+# Find the actual extracted directory name (handles snapshots where filename != directory name)
+$actualDistributionDir = ""
+
+# First try the expected directory name (for regular distributions)
+$expectedPath = Join-Path "$TMP_DOWNLOAD_DIR" "$distributionUrlNameMain"
+$expectedMvnPath = Join-Path "$expectedPath" "bin/$MVN_CMD"
+if ((Test-Path -Path $expectedPath -PathType Container) -and (Test-Path -Path $expectedMvnPath -PathType Leaf)) {
+  $actualDistributionDir = $distributionUrlNameMain
+}
+
+# If not found, search for any directory with the Maven executable (for snapshots)
+if (!$actualDistributionDir) {
+  Get-ChildItem -Path "$TMP_DOWNLOAD_DIR" -Directory | ForEach-Object {
+    $testPath = Join-Path $_.FullName "bin/$MVN_CMD"
+    if (Test-Path -Path $testPath -PathType Leaf) {
+      $actualDistributionDir = $_.Name
+    }
+  }
+}
+
+if (!$actualDistributionDir) {
+  Write-Error "Could not find Maven distribution directory in extracted archive"
+}
+
+Write-Verbose "Found extracted Maven distribution directory: $actualDistributionDir"
+Rename-Item -Path "$TMP_DOWNLOAD_DIR/$actualDistributionDir" -NewName $MAVEN_HOME_NAME | Out-Null
+try {
+  Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null
+} catch {
+  if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) {
+    Write-Error "fail to move MAVEN_HOME"
+  }
+} finally {
+  try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null }
+  catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" }
+}
+
+Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD"

From f593710714373969c002e614c1ce9cdff824a554 Mon Sep 17 00:00:00 2001
From: wenytang-ms <wenyutang@microsoft.com>
Date: Thu, 30 Jul 2026 10:36:04 +0800
Subject: [PATCH 2/3] build: supply the CFS credential to the CI Maven step

ci.yml pulls in maven-cfs-variables.yml but never maps System.AccessToken
onto `npm run build-server`, which is the step that runs ./mvnw through
scripts/buildJdtlsExt.js. nightly.yml and rc.yml already do this.

Without it the two halves of the redirect come apart. MVNW_REPOURL is not
secret, so it is exported and the wrapper rewrites distributionUrl to the
feed; MVNW_PASSWORD is absent, so the wrapper clears the credential pair and
fetches anonymously, and CFS answers 401. Maven never starts. Had it started,
${env.SYSTEM_ACCESSTOKEN} in cfs-settings.xml would be unresolvable and every
artifact would 401 in turn.

The failure is closed rather than silent -- nothing falls back to the public
central -- but it takes CI down on every commit to main.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 43342f3b-f3d1-495c-88c4-397a6a56c01b
---
 .azure-pipelines/ci.yml | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/.azure-pipelines/ci.yml b/.azure-pipelines/ci.yml
index a7462b2d..cc0b039c 100644
--- a/.azure-pipelines/ci.yml
+++ b/.azure-pipelines/ci.yml
@@ -60,6 +60,13 @@ extends:
                 displayName: npm install
               - script: npm run build-server
                 displayName: npm run build-server
+                # System.AccessToken is a secret, and Azure Pipelines does not export secret
+                # variables to the environment -- not even through a variable that merely
+                # references one. It is mapped here, on the step that actually runs Maven,
+                # rather than in maven-cfs-variables.yml alongside the rest of the wiring.
+                env:
+                  SYSTEM_ACCESSTOKEN: $(System.AccessToken)
+                  MVNW_PASSWORD: $(System.AccessToken)
               - task: Bash@3
                 displayName: vsce package
                 inputs:

From 3f5ec95f5b871d8555025725877191ac756f31c2 Mon Sep 17 00:00:00 2001
From: wenytang-ms <wenyutang@microsoft.com>
Date: Mon, 3 Aug 2026 10:14:10 +0800
Subject: [PATCH 3/3] build: pin the Maven wrapper to 3.9.12

vscode-maven and vscode-spring-boot-dashboard already pin 3.9.12. Moving the
last two repos onto it makes the version uniform across the four, so the CFS
wiring behaves identically everywhere and there is one fewer variable to hold
in mind the next time it is touched.

3.9.12 is served by the vscjava feed, and the wrapper reaches it through
MVNW_REPOURL exactly as 3.9.3 did. Verified locally against the feed: both
repos build clean with 0 requests to any public Maven host.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: ac225268-483d-4498-a08f-fe79a87d4d2e
---
 jdtls.ext/.mvn/wrapper/maven-wrapper.properties | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/jdtls.ext/.mvn/wrapper/maven-wrapper.properties b/jdtls.ext/.mvn/wrapper/maven-wrapper.properties
index 0786e61c..2b8cd3d6 100644
--- a/jdtls.ext/.mvn/wrapper/maven-wrapper.properties
+++ b/jdtls.ext/.mvn/wrapper/maven-wrapper.properties
@@ -1 +1 @@
-distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.3/apache-maven-3.9.3-bin.zip
+distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.12/apache-maven-3.9.12-bin.zip
