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]