[ 
https://issues.apache.org/jira/browse/MNG-7541?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17764914#comment-17764914
 ] 

ASF GitHub Bot commented on MNG-7541:
-------------------------------------

JurrianFahner commented on code in PR #982:
URL: https://github.com/apache/maven/pull/982#discussion_r1325161599


##########
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.
+-----------------------------------------------------------------------------
+#>
+
+# set title
+$Host.UI.RawUI.WindowTitle = (Get-Variable MyInvocation -Scope 
Script).Value.InvocationName
+
+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)) {
+  $JAVACMD = (get-command java).Source 
+  if (-not $JAVACMD) {
+    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"\..")
+
+# 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
+  )
+
+  return -not $path.endsWith(":\")
+}
+
+function RetrieveContentsJvmConfig {
+  param (
+    [String] $path
+  )
+
+  $jvm_location = $path + "\.mvn\jvm.config"
+
+  if (Test-Path $jvm_location) {
+    return $env:MAVEN_OPTS + (Get-Content $jvm_location).Replace("`n", 
"").Replace("`r", "");
+  }
+  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"

Review Comment:
   No there is only one jar. The * is there if the version changes, the script 
will stil work. 





> Native support for PowerShell to start Maven
> --------------------------------------------
>
>                 Key: MNG-7541
>                 URL: https://issues.apache.org/jira/browse/MNG-7541
>             Project: Maven
>          Issue Type: Improvement
>          Components: Command Line
>    Affects Versions: 3.8.3
>         Environment: windows 10 / 11
>            Reporter: Jurrian Fahner
>            Priority: Trivial
>              Labels: Script, Windows10, Windows11
>
> Maven has two files in the bin dir:
> ||command||its use||
> |mvn|POSIX shell|
> |mvn.cmd|cmd.exe|
> On windows there are two ways to write scripts, by using cmd.exe or using 
> powershell.
> If you enter mvn in powershell it will look for `mvn.ps1` on the PATH first. 
> If it doesn't find anything it will execute `mvn.cmd` as fall-back.
> When running maven for starting a server for development purposes and you do 
> ctrl-c to exit the server it will ask the question: Terminate batch job (Y/N)?
> As far as I know it is default behaviour of cmd.exe.
> Well if I don't want to terminate, I wouldn't press ctrl-c. ;)
> It is not the case (as far as I know that Microsoft is going to deprecate 
> cmd.exe in favor of powershell: 
> [https://devblogs.microsoft.com/commandline/rumors-of-cmds-death-have-been-greatly-exaggerated/]
> Allthough I think it would be a good move for maven to have also a powershell 
> script as well... It is possible to integrate elegant support for native help 
> in powershell, `get-help mvn`.
> But it also increases the maintenance effort as well. I don't know whether 
> this cost outweigh the benefits, though...
> By the way I would happy to contribute if it is appreciated.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to