gnodet-bot commented on code in PR #13491:
URL: https://github.com/apache/maven/pull/13491#discussion_r4268271696


##########
apache-maven/src/assembly/maven/bin/mvn:
##########
@@ -445,20 +445,38 @@ fi
 if [ -n "$MAVEN_DEBUG_SCRIPT" ]; then
   printf '[DEBUG] Final MAVEN_OPTS: %s\n' "$MAVEN_OPTS" >&2
 fi
-LAUNCHER_JAR=`echo "$MAVEN_HOME"/boot/plexus-classworlds-*.jar`
+LAUNCHER_JAR=""
+for _jar in "$MAVEN_HOME"/boot/*.jar; do
+  [ -f "$_jar" ] && LAUNCHER_JAR="${LAUNCHER_JAR:+$LAUNCHER_JAR:}$_jar"
+done
 LAUNCHER_CLASS=org.codehaus.plexus.classworlds.launcher.Launcher
 JLINE_NATIVE_PATH="$MAVEN_HOME/lib/jline-native"
+MODULES_DIR="$MAVEN_HOME/lib/modules"
+
+# Module-path and native access flags require a JDK that can read the module 
jars.
+# The probe includes --module-path so it fails on JDKs that cannot read the 
module descriptors.
+USE_MODULE_PATH=false
+if "$JAVACMD" --module-path "$MODULES_DIR" --add-modules ALL-MODULE-PATH 
--enable-native-access=org.jline.terminal.ffm -version >/dev/null 2>&1; then
+  USE_MODULE_PATH=true
+fi
 
 # For Cygwin and MinGW, switch paths to Windows format before running java(1) 
command
 if $cygwin || $mingw ; then
   [ -n "$JAVA_HOME" ] &&
     JAVA_HOME=`cygpath --windows "$JAVA_HOME"`
-  LAUNCHER_JAR=`cygpath --windows "$LAUNCHER_JAR"`
+  LAUNCHER_JAR=`cygpath --windows --path "$LAUNCHER_JAR"`
   CLASSWORLDS_CONF=`cygpath --windows "$CLASSWORLDS_CONF"`
   MAVEN_HOME=`cygpath --windows "$MAVEN_HOME"`
   # converted separately, appending to the already converted MAVEN_HOME would
   # produce a path mixing both separators, e.g. C:\maven/lib/jline-native
   JLINE_NATIVE_PATH=`cygpath --windows "$JLINE_NATIVE_PATH"`
+  MAVEN_PROJECTBASEDIR=`cygpath --windows "$MAVEN_PROJECTBASEDIR"`
+  MODULES_DIR=`cygpath --windows "$MODULES_DIR"`
+fi
+
+MAVEN_MODULE_OPTS=""
+if $USE_MODULE_PATH; then
+  MAVEN_MODULE_OPTS="--module-path \"$MODULES_DIR\" --add-modules 
ALL-MODULE-PATH --enable-native-access=org.jline.terminal.ffm,org.jline.nativ"

Review Comment:
   ⚠️ **`--enable-native-access` regression when module-path probe fails**
   
   The old script unconditionally passed `--enable-native-access=ALL-UNNAMED`. 
This PR replaces it with `$MAVEN_MODULE_OPTS`, which is **empty** when the 
probe fails — meaning no `--enable-native-access` at all.
   
   On JDK 22+ this causes JLine's native access (JNI and FFM in the unnamed 
module) to get denied at runtime, breaking terminal functionality on any JDK 
where the module-path probe fails (e.g. MinGW, locked-down environments).
   
   Initialize `MAVEN_MODULE_OPTS` to the fallback before the probe:
   
   ```suggestion
   MAVEN_MODULE_OPTS="--enable-native-access=ALL-UNNAMED"
   if $USE_MODULE_PATH; then
     MAVEN_MODULE_OPTS="--module-path \"$MODULES_DIR\" --add-modules 
ALL-MODULE-PATH --enable-native-access=org.jline.terminal.ffm,org.jline.nativ"
   ```



##########
apache-maven/src/assembly/maven/bin/mvn.cmd:
##########
@@ -391,25 +391,39 @@ goto processArgs
 :endHandleArgs
 call :processArgs %*
 
-for %%i in ("%MAVEN_HOME%"\boot\plexus-classworlds-*) do set LAUNCHER_JAR="%%i"
+set LAUNCHER_JAR="%MAVEN_HOME%\boot\*"
 set LAUNCHER_CLASS=org.codehaus.plexus.classworlds.launcher.Launcher
+set MODULES_DIR="%MAVEN_HOME%\lib\modules"
 if "%MAVEN_MAIN_CLASS%"=="" @set 
MAVEN_MAIN_CLASS=org.apache.maven.cling.MavenCling
 
-@REM Only pass MAVEN_ARGS for the default Maven build command (MavenCling),
+@rem Module-path and native access flags require a JDK that can read the 
module jars.
+@rem The probe includes --module-path so it fails on JDKs that cannot read the 
module descriptors.
+set MAVEN_MODULE_OPTS=

Review Comment:
   ⚠️ **Same `--enable-native-access` regression in the Windows script**
   
   Same issue as in `mvn`: when the module-path probe fails, 
`MAVEN_MODULE_OPTS` is empty — losing the `ALL-UNNAMED` grant that the old 
script passed unconditionally. Initialize to the fallback:
   
   ```suggestion
   set LAUNCHER_JAR="%MAVEN_HOME%\boot\*"
   set LAUNCHER_CLASS=org.codehaus.plexus.classworlds.launcher.Launcher
   set MODULES_DIR="%MAVEN_HOME%\lib\modules"
   if "%MAVEN_MAIN_CLASS%"=="" @set 
MAVEN_MAIN_CLASS=org.apache.maven.cling.MavenCling
   
   @rem Module-path and native access flags require a JDK that can read the 
module jars.
   @rem The probe includes --module-path so it fails on JDKs that cannot read 
the module descriptors.
   set MAVEN_MODULE_OPTS=--enable-native-access=ALL-UNNAMED
   "%JAVACMD%" --module-path %MODULES_DIR% --add-modules ALL-MODULE-PATH 
--enable-native-access=org.jline.terminal.ffm -version >NUL 2>&1
   if not ERRORLEVEL 1 (
     set MAVEN_MODULE_OPTS=--module-path %MODULES_DIR% --add-modules 
ALL-MODULE-PATH --enable-native-access=org.jline.terminal.ffm,org.jline.nativ
   )
   ```



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to