2018-05-29 11:48:39 +02:00
#!/bin/sh
# ----------------------------------------------------------------------------
# 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.
# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
2024-11-18 08:28:35 +01:00
# Apache Maven Wrapper startup batch script, version 3.3.2
2018-05-29 11:48:39 +02:00
#
# Optional ENV vars
# -----------------
2024-11-18 08:28:35 +01:00
# JAVA_HOME - location of a JDK home dir, required when download maven via java source
# MVNW_REPOURL - repo url base for downloading maven distribution
# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven
# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output
2018-05-29 11:48:39 +02:00
# ----------------------------------------------------------------------------
2024-11-18 08:28:35 +01:00
set -euf
[ " ${ MVNW_VERBOSE - } " != debug ] || set -x
2018-05-29 11:48:39 +02:00
2024-11-18 08:28:35 +01:00
# OS specific support.
native_path( ) { printf %s\\ n " $1 " ; }
2024-01-20 23:25:52 +01:00
case " $( uname) " in
2024-11-18 08:28:35 +01:00
CYGWIN* | MINGW*)
[ -z " ${ JAVA_HOME - } " ] || JAVA_HOME = " $( cygpath --unix " $JAVA_HOME " ) "
native_path( ) { cygpath --path --windows " $1 " ; }
; ;
2018-05-29 11:48:39 +02:00
esac
2024-11-18 08:28:35 +01:00
# set JAVACMD and JAVACCMD
set_java_home( ) {
# For Cygwin and MinGW, ensure paths are in Unix format before anything is touched
if [ -n " ${ JAVA_HOME - } " ] ; then
if [ -x " $JAVA_HOME /jre/sh/java " ] ; then
2018-05-29 11:48:39 +02:00
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD = " $JAVA_HOME /jre/sh/java "
2024-11-18 08:28:35 +01:00
JAVACCMD = " $JAVA_HOME /jre/sh/javac "
2018-05-29 11:48:39 +02:00
else
JAVACMD = " $JAVA_HOME /bin/java "
2024-11-18 08:28:35 +01:00
JAVACCMD = " $JAVA_HOME /bin/javac "
if [ ! -x " $JAVACMD " ] || [ ! -x " $JAVACCMD " ] ; then
echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >& 2
echo " JAVA_HOME is set to \" $JAVA_HOME \", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist. " >& 2
return 1
fi
2018-05-29 11:48:39 +02:00
fi
else
2024-11-18 08:28:35 +01:00
JAVACMD = " $(
'set' +e
'unset' -f command 2>/dev/null
'command' -v java
) " || :
JAVACCMD = " $(
'set' +e
'unset' -f command 2>/dev/null
'command' -v javac
) " || :
2018-05-29 11:48:39 +02:00
2024-11-18 08:28:35 +01:00
if [ ! -x " ${ JAVACMD - } " ] || [ ! -x " ${ JAVACCMD - } " ] ; then
echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >& 2
return 1
fi
2018-05-29 11:48:39 +02:00
fi
2024-11-18 08:28:35 +01:00
}
2018-05-29 11:48:39 +02:00
2024-11-18 08:28:35 +01:00
# hash string like Java String::hashCode
hash_string( ) {
str = " ${ 1 :- } " h = 0
while [ -n " $str " ] ; do
char = " ${ str % " ${ str #? } " } "
h = $(( ( h * 31 + $( LC_CTYPE = C printf %d " ' $char " ) ) % 4294967296 ))
str = " ${ str #? } "
2018-05-29 11:48:39 +02:00
done
2024-11-18 08:28:35 +01:00
printf %x\\ n $h
2018-05-29 11:48:39 +02:00
}
2024-11-18 08:28:35 +01:00
verbose( ) { :; }
[ " ${ MVNW_VERBOSE - } " != true ] || verbose( ) { printf %s\\ n " ${ 1 - } " ; }
die( ) {
printf %s\\ n " $1 " >& 2
exit 1
2024-01-20 23:25:52 +01:00
}
2024-11-18 08:28:35 +01:00
trim( ) {
# MWRAPPER-139:
# Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds.
# Needed for removing poorly interpreted newline sequences when running in more
# exotic environments such as mingw bash on Windows.
printf "%s" " ${ 1 } " | tr -d '[:space:]'
}
# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties
while IFS = "=" read -r key value; do
case " ${ key - } " in
distributionUrl) distributionUrl = $( trim " ${ value - } " ) ; ;
distributionSha256Sum) distributionSha256Sum = $( trim " ${ value - } " ) ; ;
esac
done <" ${ 0 %/* } /.mvn/wrapper/maven-wrapper.properties "
[ -n " ${ distributionUrl - } " ] || die " cannot read distributionUrl property in ${ 0 %/* } /.mvn/wrapper/maven-wrapper.properties "
case " ${ distributionUrl ##*/ } " in
maven-mvnd-*bin.*)
MVN_CMD = mvnd.sh _MVNW_REPO_PATTERN = /maven/mvnd/
case " ${ PROCESSOR_ARCHITECTURE - } ${ PROCESSOR_ARCHITEW6432 - } : $( uname -a) " in
*AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform = windows-amd64 ; ;
:Darwin*x86_64) distributionPlatform = darwin-amd64 ; ;
:Darwin*arm64) distributionPlatform = darwin-aarch64 ; ;
:Linux*x86_64*) distributionPlatform = linux-amd64 ; ;
*)
echo " Cannot detect native platform for mvnd on $( uname) - $( uname -m) , use pure java version " >& 2
distributionPlatform = linux-amd64
; ;
esac
distributionUrl = " ${ distributionUrl %-bin.* } - $distributionPlatform .zip "
; ;
maven-mvnd-*) MVN_CMD = mvnd.sh _MVNW_REPO_PATTERN = /maven/mvnd/ ; ;
*) MVN_CMD = " mvn ${ 0 ##*/mvnw } " _MVNW_REPO_PATTERN = /org/apache/maven/ ; ;
esac
# apply MVNW_REPOURL and calculate MAVEN_HOME
# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-<version>,maven-mvnd-<version>-<platform>}/<hash>
[ -z " ${ MVNW_REPOURL - } " ] || distributionUrl = " $MVNW_REPOURL $_MVNW_REPO_PATTERN ${ distributionUrl #* " $_MVNW_REPO_PATTERN " } "
distributionUrlName = " ${ distributionUrl ##*/ } "
distributionUrlNameMain = " ${ distributionUrlName %.* } "
distributionUrlNameMain = " ${ distributionUrlNameMain %-bin } "
MAVEN_USER_HOME = " ${ MAVEN_USER_HOME :- ${ HOME } /.m2 } "
MAVEN_HOME = " ${ MAVEN_USER_HOME } /wrapper/dists/ ${ distributionUrlNameMain - } / $( hash_string " $distributionUrl " ) "
exec_maven( ) {
unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || :
exec " $MAVEN_HOME /bin/ $MVN_CMD " " $@ " || die " cannot exec $MAVEN_HOME /bin/ $MVN_CMD "
2018-05-29 11:48:39 +02:00
}
2024-11-18 08:28:35 +01:00
if [ -d " $MAVEN_HOME " ] ; then
verbose " found existing MAVEN_HOME at $MAVEN_HOME "
exec_maven " $@ "
2018-05-29 11:48:39 +02:00
fi
2024-11-18 08:28:35 +01:00
case " ${ distributionUrl - } " in
*?-bin.zip | *?maven-mvnd-?*-?*.zip) ; ;
*) die " distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found ' ${ distributionUrl - } ' " ; ;
esac
2024-01-20 23:25:52 +01:00
2024-11-18 08:28:35 +01:00
# prepare tmp dir
if TMP_DOWNLOAD_DIR = " $( mktemp -d) " && [ -d " $TMP_DOWNLOAD_DIR " ] ; then
clean( ) { rm -rf -- " $TMP_DOWNLOAD_DIR " ; }
trap clean HUP INT TERM EXIT
2018-05-29 11:48:39 +02:00
else
2024-11-18 08:28:35 +01:00
die "cannot create temp dir"
fi
2024-01-20 23:25:52 +01:00
2024-11-18 08:28:35 +01:00
mkdir -p -- " ${ MAVEN_HOME %/* } "
2024-01-20 23:25:52 +01:00
2024-11-18 08:28:35 +01:00
# Download and Install Apache Maven
verbose "Couldn't find MAVEN_HOME, downloading and installing it ..."
verbose " Downloading from: $distributionUrl "
verbose " Downloading to: $TMP_DOWNLOAD_DIR / $distributionUrlName "
2018-05-29 11:48:39 +02:00
2024-11-18 08:28:35 +01:00
# select .zip or .tar.gz
if ! command -v unzip >/dev/null; then
distributionUrl = " ${ distributionUrl %.zip } .tar.gz "
distributionUrlName = " ${ distributionUrl ##*/ } "
2018-05-29 11:48:39 +02:00
fi
2024-11-18 08:28:35 +01:00
# verbose opt
__MVNW_QUIET_WGET = --quiet __MVNW_QUIET_CURL = --silent __MVNW_QUIET_UNZIP = -q __MVNW_QUIET_TAR = ''
[ " ${ MVNW_VERBOSE - } " != true ] || __MVNW_QUIET_WGET = '' __MVNW_QUIET_CURL = '' __MVNW_QUIET_UNZIP = '' __MVNW_QUIET_TAR = v
# normalize http auth
case " ${ MVNW_PASSWORD : +has-password } " in
'' ) MVNW_USERNAME = '' MVNW_PASSWORD = '' ; ;
has-password) [ -n " ${ MVNW_USERNAME - } " ] || MVNW_USERNAME = '' MVNW_PASSWORD = '' ; ;
esac
if [ -z " ${ MVNW_USERNAME - } " ] && command -v wget >/dev/null; then
verbose "Found wget ... using wget"
wget ${ __MVNW_QUIET_WGET : + " $__MVNW_QUIET_WGET " } " $distributionUrl " -O " $TMP_DOWNLOAD_DIR / $distributionUrlName " || die " wget: Failed to fetch $distributionUrl "
elif [ -z " ${ MVNW_USERNAME - } " ] && command -v curl >/dev/null; then
verbose "Found curl ... using curl"
curl ${ __MVNW_QUIET_CURL : + " $__MVNW_QUIET_CURL " } -f -L -o " $TMP_DOWNLOAD_DIR / $distributionUrlName " " $distributionUrl " || die " curl: Failed to fetch $distributionUrl "
elif set_java_home; then
verbose "Falling back to use Java to download"
javaSource = " $TMP_DOWNLOAD_DIR /Downloader.java "
targetZip = " $TMP_DOWNLOAD_DIR / $distributionUrlName "
cat >" $javaSource " <<-END
public class Downloader extends java.net.Authenticator
{
protected java.net.PasswordAuthentication getPasswordAuthentication()
{
return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() );
}
public static void main( String[] args ) throws Exception
{
setDefault( new Downloader() );
java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() );
}
}
END
# For Cygwin/MinGW, switch paths to Windows format before running javac and java
verbose " - Compiling Downloader.java ..."
" $( native_path " $JAVACCMD " ) " " $( native_path " $javaSource " ) " || die "Failed to compile Downloader.java"
verbose " - Running Downloader.java ..."
" $( native_path " $JAVACMD " ) " -cp " $( native_path " $TMP_DOWNLOAD_DIR " ) " Downloader " $distributionUrl " " $( native_path " $targetZip " ) "
fi
# If specified, validate the SHA-256 sum of the Maven distribution zip file
if [ -n " ${ distributionSha256Sum - } " ] ; then
distributionSha256Result = false
if [ " $MVN_CMD " = mvnd.sh ] ; then
echo "Checksum validation is not supported for maven-mvnd." >& 2
echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >& 2
exit 1
elif command -v sha256sum >/dev/null; then
if echo " $distributionSha256Sum $TMP_DOWNLOAD_DIR / $distributionUrlName " | sha256sum -c >/dev/null 2>& 1; then
distributionSha256Result = true
2024-01-20 23:25:52 +01:00
fi
2024-11-18 08:28:35 +01:00
elif command -v shasum >/dev/null; then
if echo " $distributionSha256Sum $TMP_DOWNLOAD_DIR / $distributionUrlName " | shasum -a 256 -c >/dev/null 2>& 1; then
distributionSha256Result = true
2024-01-20 23:25:52 +01:00
fi
else
2024-11-18 08:28:35 +01:00
echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >& 2
echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >& 2
2024-01-20 23:25:52 +01:00
exit 1
fi
2024-11-18 08:28:35 +01:00
if [ $distributionSha256Result = false ] ; then
echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >& 2
echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >& 2
2024-01-20 23:25:52 +01:00
exit 1
fi
2018-05-29 11:48:39 +02:00
fi
2024-01-20 23:25:52 +01:00
2024-11-18 08:28:35 +01:00
# unzip and move
if command -v unzip >/dev/null; then
unzip ${ __MVNW_QUIET_UNZIP : + " $__MVNW_QUIET_UNZIP " } " $TMP_DOWNLOAD_DIR / $distributionUrlName " -d " $TMP_DOWNLOAD_DIR " || die "failed to unzip"
else
tar xzf${ __MVNW_QUIET_TAR : + " $__MVNW_QUIET_TAR " } " $TMP_DOWNLOAD_DIR / $distributionUrlName " -C " $TMP_DOWNLOAD_DIR " || die "failed to untar"
2018-05-29 11:48:39 +02:00
fi
2024-11-18 08:28:35 +01:00
printf %s\\ n " $distributionUrl " >" $TMP_DOWNLOAD_DIR / $distributionUrlNameMain /mvnw.url "
mv -- " $TMP_DOWNLOAD_DIR / $distributionUrlNameMain " " $MAVEN_HOME " || [ -d " $MAVEN_HOME " ] || die "fail to move MAVEN_HOME"
2018-05-29 11:48:39 +02:00
2024-11-18 08:28:35 +01:00
clean || :
exec_maven " $@ "