gnodet-bot commented on code in PR #982: URL: https://github.com/apache/maven/pull/982#discussion_r4169950226
########## apache-maven/src/bin/mvn.ps1: ########## @@ -0,0 +1,158 @@ +<# +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. + +----------------------------------------------------------------------------- +Apache Maven Startup Script + +Environment Variable Prerequisites + + JAVA_HOME (Optional) Points to a Java installation. + MAVEN_ARGS (Optional) Arguments passed to Maven before CLI arguments. + MAVEN_OPTS (Optional) Java runtime options used when Maven is executed. + MAVEN_SKIP_RC (Optional) Flag to disable loading of mavenrc files. +----------------------------------------------------------------------------- +#> + +if (-not $env:MAVEN_SKIP_RC) { + if (Test-Path -Path $env:PROGRAMDATA\mavenrc.ps1 -PathType Leaf) { &$env:PROGRAMDATA"\mavenrc.ps1" $args } + if (Test-Path -Path $env:USERPROFILE\mavenrc.ps1 -PathType Leaf) { &$env:USERPROFILE"\mavenrc.ps1" $args } +} + +if (-not (Test-path $env:JAVA_HOME)) { + try { + $JAVACMD = (get-command java).Source + } catch { + Write-Error -ErrorAction Stop -Message "The $env:JAVA_HOME has not been set, JAVA_HOME environment variable is not defined correctly, so Apache Maven cannot be started." + } +} +else { + $JAVACMD = $env:JAVA_HOME + "\bin\java.exe" +} + +if (-not (Test-Path $JAVACMD)) { + Write-Error -Message "The JAVA_HOME environment variable is not defined correctly, so Apache Maven cannot be started." + $ERROR_MESSAGE = "JAVA_HOME is set to " + $env:JAVA_HOME + ", but " + $JAVACMD + " does not exist." + Write-Error -ErrorAction Stop -Message $ERROR_MESSAGE +} + +# check mvn home +$MAVEN_HOME = (Get-Item $PSScriptRoot).Parent + +# check if maven command exists +if (-not (Test-path "$MAVEN_HOME\bin\mvn.ps1")) { + Write-Error -Message "maven command (\bin\mvn.ps1) cannot be found" -ErrorAction Stop +} +# ==== END VALIDATION ==== + +$CLASSWORLDS_CONF = "$MAVEN_HOME\bin\m2.conf" + +# Find the project basedir, i.e., the directory that contains the directory ".mvn". +# Fallback to current working directory if not found. + +$WDIR = Get-Location + +# Look for the --file switch and start the search for the .mvn directory from the specified +# POM location, if supplied. + +$i = 0 +$file_flag_found = $false +foreach ($arg in $args) { + if (($arg -ceq "-f") -or ($arg -ceq "--file")) { + $file_flag_found = $true + break + } + $i += 1 +} + +function IsNotRoot { + param ( + [String] $path + ) + $root_path_base_name = ((get-item $path).Root.BaseName + $path_base_name = ((get-item $path).BaseName + + return $root_path_base_name -ne $path_base_name +} + +function RetrieveContentsJvmConfig { + param ( + [String] $path + ) + + $jvm_location = $path + "\.mvn\jvm.config" + + if (Test-Path $jvm_location) { + return $env:MAVEN_OPTS + " " + -Join (Get-Content $jvm_location) + } + return $env:MAVEN_OPTS +} + +$basedir = "" + +if ($file_flag_found) { + # we need to assess if the file exists + # and then search for the maven project base dir. + $pom_file_reference = $args[$i + 1] + + if (Test-Path $pom_file_reference) { + $basedir = (Get-Item $pom_file_reference).DirectoryName + } + else { + $pom_file_error = "POM file " + $pom_file_reference + " specified the -f/--file command-line argument does not exist" + Write-Error -Message $pom_file_error -ErrorAction Stop + } +} +else { + # if file flag is not found, then the pom.xml is relative to the working dir + # and the jvm.config can be found in the maven project base dir. + + $basedir = $WDIR + + while (IsNotRoot($WDIR.Path)) { + if (Test-Path "$WDIR\.mvn") { + $basedir = $WDIR + break + } + + if ($WDIR) { + $WDIR = Split-Path $WDIR + } + else { + break + } + } +} + +$MAVEN_OPTS = (RetrieveContentsJvmConfig $basedir) + +$LAUNCHER_JAR = Get-Item $MAVEN_HOME"\boot\plexus-classworlds*.jar" +$LAUNCHER_CLASS = "org.codehaus.plexus.classworlds.launcher.Launcher" + +& $JAVACMD ` + $MAVEN_OPTS ` + $MAVEN_DEBUG_OPTS ` + -classpath $LAUNCHER_JAR ` + "-Dclassworlds.conf=$CLASSWORLDS_CONF" ` + "-Dmaven.home=$MAVEN_HOME" ` + "-Dlibrary.jansi.path=$MAVEN_HOME\lib\jansi-native" ` Review Comment: 🔴 **Critical: JVM options passed as a single string argument instead of individual args.** `$MAVEN_OPTS` is a string like `"-Xmx512m -Dfoo=bar"`. When PowerShell invokes `& $JAVACMD $MAVEN_OPTS`, the entire string is passed as **one argument** to `java.exe`, not split into individual flags. Java will fail with `Unrecognized option`. Same problem applies to `$MAVEN_DEBUG_OPTS`. Fix: split the string into an array before passing it. ```suggestion $MAVEN_OPTS_ARRAY = if ($MAVEN_OPTS) { $MAVEN_OPTS.Split(' ', [System.StringSplitOptions]::RemoveEmptyEntries) } else { @() } $MAVEN_DEBUG_ARRAY = if ($env:MAVEN_DEBUG_OPTS) { $env:MAVEN_DEBUG_OPTS.Split(' ', [System.StringSplitOptions]::RemoveEmptyEntries) } else { @() } & $JAVACMD ` @MAVEN_OPTS_ARRAY ` @MAVEN_DEBUG_ARRAY ` -classpath $LAUNCHER_JAR ` "-Dclassworlds.conf=$CLASSWORLDS_CONF" ` "-Dmaven.home=$MAVEN_HOME" ` "-Dlibrary.jansi.path=$MAVEN_HOME\lib\jansi-native" ` "-Dmaven.multiModuleProjectDirectory=$basedir" ` $LAUNCHER_CLASS ` $env:MAVEN_ARGS ` $args ``` (Note: this also fixes the `$MAVEN_ARGS` → `$env:MAVEN_ARGS` and `$MAVEN_DEBUG_OPTS` → `$env:MAVEN_DEBUG_OPTS` scope issues from the previous review.) ########## apache-maven/src/bin/mvn.ps1: ########## @@ -0,0 +1,158 @@ +<# +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. + +----------------------------------------------------------------------------- +Apache Maven Startup Script + +Environment Variable Prerequisites + + JAVA_HOME (Optional) Points to a Java installation. + MAVEN_ARGS (Optional) Arguments passed to Maven before CLI arguments. + MAVEN_OPTS (Optional) Java runtime options used when Maven is executed. + MAVEN_SKIP_RC (Optional) Flag to disable loading of mavenrc files. +----------------------------------------------------------------------------- +#> + +if (-not $env:MAVEN_SKIP_RC) { + if (Test-Path -Path $env:PROGRAMDATA\mavenrc.ps1 -PathType Leaf) { &$env:PROGRAMDATA"\mavenrc.ps1" $args } + if (Test-Path -Path $env:USERPROFILE\mavenrc.ps1 -PathType Leaf) { &$env:USERPROFILE"\mavenrc.ps1" $args } +} + +if (-not (Test-path $env:JAVA_HOME)) { + try { + $JAVACMD = (get-command java).Source + } catch { + Write-Error -ErrorAction Stop -Message "The $env:JAVA_HOME has not been set, JAVA_HOME environment variable is not defined correctly, so Apache Maven cannot be started." + } +} +else { + $JAVACMD = $env:JAVA_HOME + "\bin\java.exe" +} + +if (-not (Test-Path $JAVACMD)) { + Write-Error -Message "The JAVA_HOME environment variable is not defined correctly, so Apache Maven cannot be started." + $ERROR_MESSAGE = "JAVA_HOME is set to " + $env:JAVA_HOME + ", but " + $JAVACMD + " does not exist." + Write-Error -ErrorAction Stop -Message $ERROR_MESSAGE +} + +# check mvn home +$MAVEN_HOME = (Get-Item $PSScriptRoot).Parent + +# check if maven command exists +if (-not (Test-path "$MAVEN_HOME\bin\mvn.ps1")) { + Write-Error -Message "maven command (\bin\mvn.ps1) cannot be found" -ErrorAction Stop +} +# ==== END VALIDATION ==== + +$CLASSWORLDS_CONF = "$MAVEN_HOME\bin\m2.conf" + +# Find the project basedir, i.e., the directory that contains the directory ".mvn". +# Fallback to current working directory if not found. + +$WDIR = Get-Location + +# Look for the --file switch and start the search for the .mvn directory from the specified +# POM location, if supplied. + +$i = 0 +$file_flag_found = $false +foreach ($arg in $args) { + if (($arg -ceq "-f") -or ($arg -ceq "--file")) { + $file_flag_found = $true + break + } + $i += 1 +} + +function IsNotRoot { + param ( + [String] $path + ) + $root_path_base_name = ((get-item $path).Root.BaseName + $path_base_name = ((get-item $path).BaseName + + return $root_path_base_name -ne $path_base_name +} + +function RetrieveContentsJvmConfig { + param ( + [String] $path + ) + + $jvm_location = $path + "\.mvn\jvm.config" + + if (Test-Path $jvm_location) { + return $env:MAVEN_OPTS + " " + -Join (Get-Content $jvm_location) + } + return $env:MAVEN_OPTS +} + +$basedir = "" + +if ($file_flag_found) { + # we need to assess if the file exists + # and then search for the maven project base dir. + $pom_file_reference = $args[$i + 1] + + if (Test-Path $pom_file_reference) { Review Comment: ⚠️ **`-f <directory>` is mishandled.** `mvn.cmd` accepts both files and directories as `-f` arguments. Here, `(Get-Item $pom_file_reference).DirectoryName` only works for files — for a directory, `.DirectoryName` returns the **parent** directory, so the basedir will be wrong. ```suggestion if (Test-Path $pom_file_reference) { $item = Get-Item $pom_file_reference if ($item.PSIsContainer) { $basedir = $item.FullName } else { $basedir = $item.DirectoryName } ``` ########## apache-maven/src/bin/mvn.ps1: ########## @@ -0,0 +1,158 @@ +<# +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. + +----------------------------------------------------------------------------- +Apache Maven Startup Script + +Environment Variable Prerequisites + + JAVA_HOME (Optional) Points to a Java installation. + MAVEN_ARGS (Optional) Arguments passed to Maven before CLI arguments. + MAVEN_OPTS (Optional) Java runtime options used when Maven is executed. + MAVEN_SKIP_RC (Optional) Flag to disable loading of mavenrc files. +----------------------------------------------------------------------------- +#> + +if (-not $env:MAVEN_SKIP_RC) { + if (Test-Path -Path $env:PROGRAMDATA\mavenrc.ps1 -PathType Leaf) { &$env:PROGRAMDATA"\mavenrc.ps1" $args } + if (Test-Path -Path $env:USERPROFILE\mavenrc.ps1 -PathType Leaf) { &$env:USERPROFILE"\mavenrc.ps1" $args } +} + +if (-not (Test-path $env:JAVA_HOME)) { + try { + $JAVACMD = (get-command java).Source + } catch { + Write-Error -ErrorAction Stop -Message "The $env:JAVA_HOME has not been set, JAVA_HOME environment variable is not defined correctly, so Apache Maven cannot be started." + } +} +else { + $JAVACMD = $env:JAVA_HOME + "\bin\java.exe" +} + +if (-not (Test-Path $JAVACMD)) { + Write-Error -Message "The JAVA_HOME environment variable is not defined correctly, so Apache Maven cannot be started." + $ERROR_MESSAGE = "JAVA_HOME is set to " + $env:JAVA_HOME + ", but " + $JAVACMD + " does not exist." + Write-Error -ErrorAction Stop -Message $ERROR_MESSAGE +} + +# check mvn home +$MAVEN_HOME = (Get-Item $PSScriptRoot).Parent + +# check if maven command exists +if (-not (Test-path "$MAVEN_HOME\bin\mvn.ps1")) { + Write-Error -Message "maven command (\bin\mvn.ps1) cannot be found" -ErrorAction Stop +} +# ==== END VALIDATION ==== + +$CLASSWORLDS_CONF = "$MAVEN_HOME\bin\m2.conf" + +# Find the project basedir, i.e., the directory that contains the directory ".mvn". +# Fallback to current working directory if not found. + +$WDIR = Get-Location Review Comment: ⚠️ **Missing `MAVEN_BASEDIR` support.** `mvn.cmd` checks `%MAVEN_BASEDIR%` to allow users/CI to override project basedir detection entirely (skips the `.mvn` directory walk). This script ignores `$env:MAVEN_BASEDIR`. Add before the basedir detection block: ```powershell if ($env:MAVEN_BASEDIR) { $basedir = $env:MAVEN_BASEDIR } else { # ... existing detection logic } ``` ########## apache-maven/src/bin/mvn.ps1: ########## @@ -0,0 +1,158 @@ +<# +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. + +----------------------------------------------------------------------------- +Apache Maven Startup Script + +Environment Variable Prerequisites + + JAVA_HOME (Optional) Points to a Java installation. + MAVEN_ARGS (Optional) Arguments passed to Maven before CLI arguments. + MAVEN_OPTS (Optional) Java runtime options used when Maven is executed. + MAVEN_SKIP_RC (Optional) Flag to disable loading of mavenrc files. +----------------------------------------------------------------------------- +#> + +if (-not $env:MAVEN_SKIP_RC) { + if (Test-Path -Path $env:PROGRAMDATA\mavenrc.ps1 -PathType Leaf) { &$env:PROGRAMDATA"\mavenrc.ps1" $args } + if (Test-Path -Path $env:USERPROFILE\mavenrc.ps1 -PathType Leaf) { &$env:USERPROFILE"\mavenrc.ps1" $args } +} + +if (-not (Test-path $env:JAVA_HOME)) { + try { + $JAVACMD = (get-command java).Source + } catch { + Write-Error -ErrorAction Stop -Message "The $env:JAVA_HOME has not been set, JAVA_HOME environment variable is not defined correctly, so Apache Maven cannot be started." + } +} +else { + $JAVACMD = $env:JAVA_HOME + "\bin\java.exe" +} + +if (-not (Test-Path $JAVACMD)) { + Write-Error -Message "The JAVA_HOME environment variable is not defined correctly, so Apache Maven cannot be started." + $ERROR_MESSAGE = "JAVA_HOME is set to " + $env:JAVA_HOME + ", but " + $JAVACMD + " does not exist." + Write-Error -ErrorAction Stop -Message $ERROR_MESSAGE +} + +# check mvn home +$MAVEN_HOME = (Get-Item $PSScriptRoot).Parent + +# check if maven command exists +if (-not (Test-path "$MAVEN_HOME\bin\mvn.ps1")) { + Write-Error -Message "maven command (\bin\mvn.ps1) cannot be found" -ErrorAction Stop +} +# ==== END VALIDATION ==== + +$CLASSWORLDS_CONF = "$MAVEN_HOME\bin\m2.conf" + +# Find the project basedir, i.e., the directory that contains the directory ".mvn". +# Fallback to current working directory if not found. + +$WDIR = Get-Location + +# Look for the --file switch and start the search for the .mvn directory from the specified +# POM location, if supplied. + +$i = 0 +$file_flag_found = $false +foreach ($arg in $args) { + if (($arg -ceq "-f") -or ($arg -ceq "--file")) { + $file_flag_found = $true + break + } + $i += 1 +} + +function IsNotRoot { + param ( + [String] $path + ) + $root_path_base_name = ((get-item $path).Root.BaseName + $path_base_name = ((get-item $path).BaseName + + return $root_path_base_name -ne $path_base_name +} + +function RetrieveContentsJvmConfig { + param ( + [String] $path + ) + + $jvm_location = $path + "\.mvn\jvm.config" + + if (Test-Path $jvm_location) { + return $env:MAVEN_OPTS + " " + -Join (Get-Content $jvm_location) + } + return $env:MAVEN_OPTS +} Review Comment: ⚠️ **Missing `${MAVEN_PROJECTBASEDIR}` substitution in jvm.config.** `mvn.cmd` replaces `${MAVEN_PROJECTBASEDIR}` and `$MAVEN_PROJECTBASEDIR` placeholders in each line of `.mvn/jvm.config`. This function reads the file as-is, so projects relying on this substitution will get literal placeholder strings passed to the JVM. ```suggestion function RetrieveContentsJvmConfig { param ( [String] $path ) $jvm_location = Join-Path $path ".mvn\jvm.config" if (Test-Path $jvm_location) { $lines = Get-Content $jvm_location | ForEach-Object { $_ -replace '\$\{MAVEN_PROJECTBASEDIR\}', $path -replace '\$MAVEN_PROJECTBASEDIR', $path } return ($env:MAVEN_OPTS + " " + ($lines -join " ")).Trim() } return $env:MAVEN_OPTS } ``` ########## apache-maven/src/bin/mvn.ps1: ########## @@ -0,0 +1,158 @@ +<# +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. + +----------------------------------------------------------------------------- +Apache Maven Startup Script + +Environment Variable Prerequisites + + JAVA_HOME (Optional) Points to a Java installation. + MAVEN_ARGS (Optional) Arguments passed to Maven before CLI arguments. + MAVEN_OPTS (Optional) Java runtime options used when Maven is executed. + MAVEN_SKIP_RC (Optional) Flag to disable loading of mavenrc files. +----------------------------------------------------------------------------- +#> + +if (-not $env:MAVEN_SKIP_RC) { + if (Test-Path -Path $env:PROGRAMDATA\mavenrc.ps1 -PathType Leaf) { &$env:PROGRAMDATA"\mavenrc.ps1" $args } + if (Test-Path -Path $env:USERPROFILE\mavenrc.ps1 -PathType Leaf) { &$env:USERPROFILE"\mavenrc.ps1" $args } Review Comment: 💡 **mavenrc.ps1 invocation syntax.** `&$env:PROGRAMDATA"\mavenrc.ps1"` concatenates the call operator `&` with the variable, which doesn't work as intended. Should be: ```suggestion if (Test-Path -Path "$env:PROGRAMDATA\mavenrc.ps1" -PathType Leaf) { & "$env:PROGRAMDATA\mavenrc.ps1" $args } if (Test-Path -Path "$env:USERPROFILE\mavenrc.ps1" -PathType Leaf) { & "$env:USERPROFILE\mavenrc.ps1" $args } ``` ########## apache-maven/src/bin/mvn.ps1: ########## @@ -0,0 +1,158 @@ +<# +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. + +----------------------------------------------------------------------------- +Apache Maven Startup Script + +Environment Variable Prerequisites + + JAVA_HOME (Optional) Points to a Java installation. + MAVEN_ARGS (Optional) Arguments passed to Maven before CLI arguments. + MAVEN_OPTS (Optional) Java runtime options used when Maven is executed. + MAVEN_SKIP_RC (Optional) Flag to disable loading of mavenrc files. +----------------------------------------------------------------------------- +#> + +if (-not $env:MAVEN_SKIP_RC) { + if (Test-Path -Path $env:PROGRAMDATA\mavenrc.ps1 -PathType Leaf) { &$env:PROGRAMDATA"\mavenrc.ps1" $args } + if (Test-Path -Path $env:USERPROFILE\mavenrc.ps1 -PathType Leaf) { &$env:USERPROFILE"\mavenrc.ps1" $args } +} + +if (-not (Test-path $env:JAVA_HOME)) { + try { + $JAVACMD = (get-command java).Source + } catch { + Write-Error -ErrorAction Stop -Message "The $env:JAVA_HOME has not been set, JAVA_HOME environment variable is not defined correctly, so Apache Maven cannot be started." + } +} +else { + $JAVACMD = $env:JAVA_HOME + "\bin\java.exe" +} + +if (-not (Test-Path $JAVACMD)) { + Write-Error -Message "The JAVA_HOME environment variable is not defined correctly, so Apache Maven cannot be started." + $ERROR_MESSAGE = "JAVA_HOME is set to " + $env:JAVA_HOME + ", but " + $JAVACMD + " does not exist." + Write-Error -ErrorAction Stop -Message $ERROR_MESSAGE +} + +# check mvn home +$MAVEN_HOME = (Get-Item $PSScriptRoot).Parent + +# check if maven command exists +if (-not (Test-path "$MAVEN_HOME\bin\mvn.ps1")) { + Write-Error -Message "maven command (\bin\mvn.ps1) cannot be found" -ErrorAction Stop +} +# ==== END VALIDATION ==== + +$CLASSWORLDS_CONF = "$MAVEN_HOME\bin\m2.conf" + +# Find the project basedir, i.e., the directory that contains the directory ".mvn". +# Fallback to current working directory if not found. + +$WDIR = Get-Location + +# Look for the --file switch and start the search for the .mvn directory from the specified +# POM location, if supplied. + +$i = 0 +$file_flag_found = $false +foreach ($arg in $args) { + if (($arg -ceq "-f") -or ($arg -ceq "--file")) { + $file_flag_found = $true + break + } + $i += 1 +} + +function IsNotRoot { + param ( + [String] $path + ) + $root_path_base_name = ((get-item $path).Root.BaseName + $path_base_name = ((get-item $path).BaseName + + return $root_path_base_name -ne $path_base_name +} + +function RetrieveContentsJvmConfig { + param ( + [String] $path + ) + + $jvm_location = $path + "\.mvn\jvm.config" + + if (Test-Path $jvm_location) { + return $env:MAVEN_OPTS + " " + -Join (Get-Content $jvm_location) + } + return $env:MAVEN_OPTS +} + +$basedir = "" + +if ($file_flag_found) { + # we need to assess if the file exists + # and then search for the maven project base dir. + $pom_file_reference = $args[$i + 1] + + if (Test-Path $pom_file_reference) { + $basedir = (Get-Item $pom_file_reference).DirectoryName + } + else { + $pom_file_error = "POM file " + $pom_file_reference + " specified the -f/--file command-line argument does not exist" + Write-Error -Message $pom_file_error -ErrorAction Stop + } +} +else { + # if file flag is not found, then the pom.xml is relative to the working dir + # and the jvm.config can be found in the maven project base dir. + + $basedir = $WDIR + + while (IsNotRoot($WDIR.Path)) { + if (Test-Path "$WDIR\.mvn") { + $basedir = $WDIR + break + } + + if ($WDIR) { + $WDIR = Split-Path $WDIR + } + else { + break + } + } +} + +$MAVEN_OPTS = (RetrieveContentsJvmConfig $basedir) + +$LAUNCHER_JAR = Get-Item $MAVEN_HOME"\boot\plexus-classworlds*.jar" +$LAUNCHER_CLASS = "org.codehaus.plexus.classworlds.launcher.Launcher" + +& $JAVACMD ` + $MAVEN_OPTS ` + $MAVEN_DEBUG_OPTS ` + -classpath $LAUNCHER_JAR ` + "-Dclassworlds.conf=$CLASSWORLDS_CONF" ` + "-Dmaven.home=$MAVEN_HOME" ` + "-Dlibrary.jansi.path=$MAVEN_HOME\lib\jansi-native" ` + "-Dmaven.multiModuleProjectDirectory=$basedir" ` + $LAUNCHER_CLASS ` + $MAVEN_ARGS ` + $args + + Review Comment: ⚠️ **Missing `--enable-native-access=ALL-UNNAMED` probe (MNG-8248).** `mvn.cmd` probes whether the JVM supports `--enable-native-access` and adds it to avoid illegal-access warnings on Java 17+. This script has no equivalent. Add before the java invocation: ```powershell $INTERNAL_OPTS = @() try { & $JAVACMD --enable-native-access=ALL-UNNAMED -version 2>&1 | Out-Null $INTERNAL_OPTS += '--enable-native-access=ALL-UNNAMED' } catch { } ``` Then include `@INTERNAL_OPTS` in the java invocation. -- 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]
