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


##########
apache-maven/src/assembly/maven/bin/mvn.cmd:
##########
@@ -382,25 +382,41 @@ 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.
+@rem Fall back to ALL-UNNAMED so that --enable-native-access is always granted 
on JDK 22+,
+@rem even when the module-path probe fails (older JDK, missing lib\modules\, 
locked-down env).
+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
+)
+
+@REM MAVEN_ARGS is only passed for the default Maven build command 
(MavenCling),
 @REM not for sub-commands like --up, --enc, --shell or --val which have their 
own options.
-if not "%MAVEN_MAIN_CLASS%"=="org.apache.maven.cling.MavenCling" set 
"MAVEN_ARGS="
+@REM IS_MAIN_OVERRIDE is set during argument scanning when any of those flags 
is found.
+if defined IS_MAIN_OVERRIDE (
+  set "MAVEN_EFFECTIVE_ARGS="
+) else (
+  set "MAVEN_EFFECTIVE_ARGS=%MAVEN_ARGS%"
+)
 
 if defined MAVEN_DEBUG_SCRIPT (
   echo [DEBUG] Launching JVM with command:
-  echo [DEBUG]   "%JAVACMD%" %INTERNAL_MAVEN_OPTS% %MAVEN_OPTS% 
%JVM_CONFIG_ARGFILE_ARG% %MAVEN_DEBUG_OPTS% --enable-native-access=ALL-UNNAMED 
-classpath %LAUNCHER_JAR% "-Dclassworlds.conf=%CLASSWORLDS_CONF%" 
"-Dmaven.home=%MAVEN_HOME%" "-Dmaven.mainClass=%MAVEN_MAIN_CLASS%" 
"-Dlibrary.jline.path=%MAVEN_HOME%\lib\jline-native" 
"-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" 
%MAVEN_VERSION_PRINTED% %LAUNCHER_CLASS% %MAVEN_ARGS% %*
+  echo [DEBUG]   "%JAVACMD%" %INTERNAL_MAVEN_OPTS% %MAVEN_OPTS% 
%JVM_CONFIG_MAVEN_OPTS% %MAVEN_DEBUG_OPTS% %MAVEN_MODULE_OPTS% -classpath 
%LAUNCHER_JAR% "-Dclassworlds.conf=%CLASSWORLDS_CONF%" 
"-Dmaven.home=%MAVEN_HOME%" "-Dmaven.mainClass=%MAVEN_MAIN_CLASS%" 
"-Dlibrary.jline.path=%MAVEN_HOME%\lib\jline-native" 
"-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %LAUNCHER_CLASS% 
%MAVEN_EFFECTIVE_ARGS% %*

Review Comment:
   ⚠️ **Stale variable reference**: `%JVM_CONFIG_MAVEN_OPTS%` was renamed to 
`%JVM_CONFIG_ARGFILE_ARG%` in a prior PR. This debug echo regresses from the 
correctly-named variable (visible in the removed line above). The actual JVM 
launch below uses `%JVM_CONFIG_ARGFILE_ARG%` correctly — only the debug output 
is broken, but it silently drops the `@argfile` path from `MAVEN_DEBUG_SCRIPT` 
output on Windows.
   
   ```suggestion
     echo [DEBUG]   "%JAVACMD%" %INTERNAL_MAVEN_OPTS% %MAVEN_OPTS% 
%JVM_CONFIG_ARGFILE_ARG% %MAVEN_DEBUG_OPTS% %MAVEN_MODULE_OPTS% -classpath 
%LAUNCHER_JAR% "-Dclassworlds.conf=%CLASSWORLDS_CONF%" 
"-Dmaven.home=%MAVEN_HOME%" "-Dmaven.mainClass=%MAVEN_MAIN_CLASS%" 
"-Dlibrary.jline.path=%MAVEN_HOME%\lib\jline-native" 
"-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %LAUNCHER_CLASS% 
%MAVEN_EFFECTIVE_ARGS% %*
   ```



-- 
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