2017-02-02 15:26:11 +01: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
#
2019-03-20 17:34:50 +01:00
# https://www.apache.org/licenses/LICENSE-2.0
2017-02-02 15:26:11 +01:00
#
# 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.
# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
2023-04-03 14:49:48 +02:00
# Apache Maven Wrapper startup batch script, version 3.2.0
2017-02-02 15:26:11 +01:00
#
# Required ENV vars:
# ------------------
# JAVA_HOME - location of a JDK home dir
#
# Optional ENV vars
# -----------------
# MAVEN_OPTS - parameters passed to the Java VM when running Maven
# e.g. to debug Maven itself, use
# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
# ----------------------------------------------------------------------------
if [ -z " $MAVEN_SKIP_RC " ] ; then
2022-01-10 14:13:36 +01:00
if [ -f /usr/local/etc/mavenrc ] ; then
. /usr/local/etc/mavenrc
fi
2017-02-02 15:26:11 +01:00
if [ -f /etc/mavenrc ] ; then
. /etc/mavenrc
fi
if [ -f " $HOME /.mavenrc" ] ; then
. " $HOME /.mavenrc"
fi
fi
# OS specific support. $var _must_ be set to either true or false.
cygwin = false;
darwin = false;
mingw = false
2023-04-03 14:49:48 +02:00
case " $( uname) " in
2017-02-02 15:26:11 +01:00
CYGWIN*) cygwin = true ;;
MINGW*) mingw = true;;
Darwin*) darwin = true
2017-04-23 12:09:39 +02:00
# Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
# See https://developer.apple.com/library/mac/qa/qa1170/_index.html
if [ -z " $JAVA_HOME " ] ; then
if [ -x "/usr/libexec/java_home" ] ; then
2023-04-03 14:49:48 +02:00
JAVA_HOME = " $( /usr/libexec/java_home) " ; export JAVA_HOME
2017-04-23 12:09:39 +02:00
else
2023-04-03 14:49:48 +02:00
JAVA_HOME = "/Library/Java/Home" ; export JAVA_HOME
2017-04-23 12:09:39 +02:00
fi
fi
;;
2017-02-02 15:26:11 +01:00
esac
if [ -z " $JAVA_HOME " ] ; then
if [ -r /etc/gentoo-release ] ; then
2023-04-03 14:49:48 +02:00
JAVA_HOME = $( java-config --jre-home)
2017-02-02 15:26:11 +01:00
fi
fi
# For Cygwin, ensure paths are in UNIX format before anything is touched
if $cygwin ; then
[ -n " $JAVA_HOME " ] &&
2023-04-03 14:49:48 +02:00
JAVA_HOME = $( cygpath --unix " $JAVA_HOME " )
2017-02-02 15:26:11 +01:00
[ -n " $CLASSPATH " ] &&
2023-04-03 14:49:48 +02:00
CLASSPATH = $( cygpath --path --unix " $CLASSPATH " )
2017-02-02 15:26:11 +01:00
fi
2019-11-05 14:36:27 +01:00
# For Mingw, ensure paths are in UNIX format before anything is touched
2017-02-02 15:26:11 +01:00
if $mingw ; then
2023-04-03 14:49:48 +02:00
[ -n " $JAVA_HOME " ] && [ -d " $JAVA_HOME " ] &&
JAVA_HOME = " $( cd " $JAVA_HOME " || ( echo "cannot cd into $JAVA_HOME ." ; exit 1) ; pwd)"
2017-02-02 15:26:11 +01:00
fi
if [ -z " $JAVA_HOME " ] ; then
2023-04-03 14:49:48 +02:00
javaExecutable = " $( which javac) "
if [ -n " $javaExecutable " ] && ! [ " $( expr "\" $javaExecutable \"" : '\([^ ]*\)' ) " = "no" ] ; then
2017-02-02 15:26:11 +01:00
# readlink(1) is not available as standard on Solaris 10.
2023-04-03 14:49:48 +02:00
readLink = $( which readlink)
if [ ! " $( expr " $readLink " : '\([^ ]*\)' ) " = "no" ] ; then
2017-02-02 15:26:11 +01:00
if $darwin ; then
2023-04-03 14:49:48 +02:00
javaHome = " $( dirname "\" $javaExecutable \"" ) "
javaExecutable = " $( cd "\" $javaHome \"" && pwd -P) /javac"
2017-02-02 15:26:11 +01:00
else
2023-04-03 14:49:48 +02:00
javaExecutable = " $( readlink -f "\" $javaExecutable \"" ) "
2017-02-02 15:26:11 +01:00
fi
2023-04-03 14:49:48 +02:00
javaHome = " $( dirname "\" $javaExecutable \"" ) "
javaHome = $( expr " $javaHome " : '\(.*\)/bin' )
2017-02-02 15:26:11 +01:00
JAVA_HOME = " $javaHome "
export JAVA_HOME
fi
fi
fi
if [ -z " $JAVACMD " ] ; then
if [ -n " $JAVA_HOME " ] ; then
if [ -x " $JAVA_HOME /jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD = " $JAVA_HOME /jre/sh/java"
else
JAVACMD = " $JAVA_HOME /bin/java"
fi
else
2023-04-03 14:49:48 +02:00
JAVACMD = " $( \u nset -f command 2>/dev/null; \c ommand -v java) "
2017-02-02 15:26:11 +01:00
fi
fi
if [ ! -x " $JAVACMD " ] ; then
echo "Error: JAVA_HOME is not defined correctly." >& 2
echo " We cannot execute $JAVACMD " >& 2
exit 1
fi
if [ -z " $JAVA_HOME " ] ; then
echo "Warning: JAVA_HOME environment variable is not set."
fi
# traverses directory structure from process work directory to filesystem root
# first directory with .mvn subdirectory is considered project base directory
find_maven_basedir() {
2017-04-23 12:09:39 +02:00
if [ -z " $1 " ]
then
echo "Path not specified to find_maven_basedir"
return 1
fi
basedir = " $1 "
wdir = " $1 "
2017-02-02 15:26:11 +01:00
while [ " $wdir " != '/' ] ; do
if [ -d " $wdir " /.mvn ] ; then
basedir = $wdir
break
fi
2017-04-23 12:09:39 +02:00
# workaround for JBEAP-8937 (on Solaris 10/Sparc)
if [ -d " ${ wdir } " ] ; then
2023-04-03 14:49:48 +02:00
wdir = $( cd " $wdir /.." || exit 1; pwd )
2017-04-23 12:09:39 +02:00
fi
# end of workaround
2017-02-02 15:26:11 +01:00
done
2023-04-03 14:49:48 +02:00
printf '%s' " $( cd " $basedir " || exit 1; pwd ) "
2017-02-02 15:26:11 +01:00
}
# concatenates all lines of a file
concat_lines() {
if [ -f " $1 " ] ; then
2023-04-03 14:49:48 +02:00
# Remove \r in case we run on Windows within Git Bash
# and check out the repository with auto CRLF management
# enabled. Otherwise, we may read lines that are delimited with
# \r\n and produce $'-Xarg\r' rather than -Xarg due to word
# splitting rules.
tr -s '\r\n' ' ' < " $1 "
fi
}
log() {
if [ " $MVNW_VERBOSE " = true ] ; then
printf '%s\n' " $1 "
2017-02-02 15:26:11 +01:00
fi
}
2023-04-03 14:49:48 +02:00
BASE_DIR = $( find_maven_basedir " $( dirname " $0 " ) " )
2017-04-23 12:09:39 +02:00
if [ -z " $BASE_DIR " ] ; then
exit 1;
fi
2023-04-03 14:49:48 +02:00
MAVEN_PROJECTBASEDIR = ${ MAVEN_BASEDIR :- " $BASE_DIR " } ; export MAVEN_PROJECTBASEDIR
log " $MAVEN_PROJECTBASEDIR "
2019-11-05 14:36:27 +01:00
##########################################################################################
# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
# This allows using the maven wrapper in projects that prohibit checking in binary data.
##########################################################################################
2023-04-03 14:49:48 +02:00
wrapperJarPath = " $MAVEN_PROJECTBASEDIR /.mvn/wrapper/maven-wrapper.jar"
if [ -r " $wrapperJarPath " ] ; then
log "Found $wrapperJarPath "
2019-11-05 14:36:27 +01:00
else
2023-04-03 14:49:48 +02:00
log "Couldn't find $wrapperJarPath , downloading it ..."
2019-11-05 14:36:27 +01:00
if [ -n " $MVNW_REPOURL " ] ; then
2023-04-03 14:49:48 +02:00
wrapperUrl = " $MVNW_REPOURL /org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
2019-11-05 14:36:27 +01:00
else
2023-04-03 14:49:48 +02:00
wrapperUrl = "https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
2019-11-05 14:36:27 +01:00
fi
2023-04-03 14:49:48 +02:00
while IFS = "=" read -r key value; do
# Remove '\r' from value to allow usage on windows as IFS does not consider '\r' as a separator ( considers space, tab, new line ('\n'), and custom '=' )
safeValue = $( echo " $value " | tr -d '\r' )
case " $key " in ( wrapperUrl) wrapperUrl = " $safeValue " ; break ;;
2019-11-05 14:36:27 +01:00
esac
2023-04-03 14:49:48 +02:00
done < " $MAVEN_PROJECTBASEDIR /.mvn/wrapper/maven-wrapper.properties"
log "Downloading from: $wrapperUrl "
2019-11-05 14:36:27 +01:00
if $cygwin ; then
2023-04-03 14:49:48 +02:00
wrapperJarPath = $( cygpath --path --windows " $wrapperJarPath " )
2019-11-05 14:36:27 +01:00
fi
if command -v wget > /dev/null; then
2023-04-03 14:49:48 +02:00
log "Found wget ... using wget"
[ " $MVNW_VERBOSE " = true ] && QUIET = "" || QUIET = "--quiet"
2019-11-05 14:36:27 +01:00
if [ -z " $MVNW_USERNAME " ] || [ -z " $MVNW_PASSWORD " ] ; then
2023-04-03 14:49:48 +02:00
wget $QUIET " $wrapperUrl " -O " $wrapperJarPath " || rm -f " $wrapperJarPath "
2019-11-05 14:36:27 +01:00
else
2023-04-03 14:49:48 +02:00
wget $QUIET --http-user= " $MVNW_USERNAME " --http-password= " $MVNW_PASSWORD " " $wrapperUrl " -O " $wrapperJarPath " || rm -f " $wrapperJarPath "
2019-11-05 14:36:27 +01:00
fi
elif command -v curl > /dev/null; then
2023-04-03 14:49:48 +02:00
log "Found curl ... using curl"
[ " $MVNW_VERBOSE " = true ] && QUIET = "" || QUIET = "--silent"
2019-11-05 14:36:27 +01:00
if [ -z " $MVNW_USERNAME " ] || [ -z " $MVNW_PASSWORD " ] ; then
2023-04-03 14:49:48 +02:00
curl $QUIET -o " $wrapperJarPath " " $wrapperUrl " -f -L || rm -f " $wrapperJarPath "
2019-11-05 14:36:27 +01:00
else
2023-04-03 14:49:48 +02:00
curl $QUIET --user " $MVNW_USERNAME : $MVNW_PASSWORD " -o " $wrapperJarPath " " $wrapperUrl " -f -L || rm -f " $wrapperJarPath "
2019-11-05 14:36:27 +01:00
fi
else
2023-04-03 14:49:48 +02:00
log "Falling back to using Java to download"
javaSource = " $MAVEN_PROJECTBASEDIR /.mvn/wrapper/MavenWrapperDownloader.java"
javaClass = " $MAVEN_PROJECTBASEDIR /.mvn/wrapper/MavenWrapperDownloader.class"
2019-11-05 14:36:27 +01:00
# For Cygwin, switch paths to Windows format before running javac
if $cygwin ; then
2023-04-03 14:49:48 +02:00
javaSource = $( cygpath --path --windows " $javaSource " )
javaClass = $( cygpath --path --windows " $javaClass " )
2019-11-05 14:36:27 +01:00
fi
2023-04-03 14:49:48 +02:00
if [ -e " $javaSource " ] ; then
if [ ! -e " $javaClass " ] ; then
log " - Compiling MavenWrapperDownloader.java ..."
( " $JAVA_HOME /bin/javac" " $javaSource " )
2019-11-05 14:36:27 +01:00
fi
2023-04-03 14:49:48 +02:00
if [ -e " $javaClass " ] ; then
log " - Running MavenWrapperDownloader.java ..."
( " $JAVA_HOME /bin/java" -cp .mvn/wrapper MavenWrapperDownloader " $wrapperUrl " " $wrapperJarPath " ) || rm -f " $wrapperJarPath "
2019-11-05 14:36:27 +01:00
fi
fi
fi
fi
##########################################################################################
# End of extension
##########################################################################################
2023-04-03 14:49:48 +02:00
# If specified, validate the SHA-256 sum of the Maven wrapper jar file
wrapperSha256Sum = ""
while IFS = "=" read -r key value; do
case " $key " in ( wrapperSha256Sum) wrapperSha256Sum = $value ; break ;;
esac
done < " $MAVEN_PROJECTBASEDIR /.mvn/wrapper/maven-wrapper.properties"
if [ -n " $wrapperSha256Sum " ] ; then
wrapperSha256Result = false
if command -v sha256sum > /dev/null; then
if echo " $wrapperSha256Sum $wrapperJarPath " | sha256sum -c > /dev/null 2>& 1; then
wrapperSha256Result = true
fi
elif command -v shasum > /dev/null; then
if echo " $wrapperSha256Sum $wrapperJarPath " | shasum -a 256 -c > /dev/null 2>& 1; then
wrapperSha256Result = true
fi
else
echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available."
echo "Please install either command, or disable validation by removing 'wrapperSha256Sum' from your maven-wrapper.properties."
exit 1
fi
if [ $wrapperSha256Result = false ] ; then
echo "Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised." >& 2
echo "Investigate or delete $wrapperJarPath to attempt a clean download." >& 2
echo "If you updated your Maven version, you need to update the specified wrapperSha256Sum property." >& 2
exit 1
fi
2019-11-05 14:36:27 +01:00
fi
2023-04-03 14:49:48 +02:00
2017-02-02 15:26:11 +01:00
MAVEN_OPTS = " $( concat_lines " $MAVEN_PROJECTBASEDIR /.mvn/jvm.config" ) $MAVEN_OPTS "
2017-04-23 12:09:39 +02:00
# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
[ -n " $JAVA_HOME " ] &&
2023-04-03 14:49:48 +02:00
JAVA_HOME = $( cygpath --path --windows " $JAVA_HOME " )
2017-04-23 12:09:39 +02:00
[ -n " $CLASSPATH " ] &&
2023-04-03 14:49:48 +02:00
CLASSPATH = $( cygpath --path --windows " $CLASSPATH " )
2017-04-23 12:09:39 +02:00
[ -n " $MAVEN_PROJECTBASEDIR " ] &&
2023-04-03 14:49:48 +02:00
MAVEN_PROJECTBASEDIR = $( cygpath --path --windows " $MAVEN_PROJECTBASEDIR " )
2017-04-23 12:09:39 +02:00
fi
2017-02-02 15:26:11 +01:00
2019-11-05 14:36:27 +01:00
# Provide a "standardized" way to retrieve the CLI args that will
# work with both Windows and non-Windows executions.
2023-04-03 14:49:48 +02:00
MAVEN_CMD_LINE_ARGS = " $MAVEN_CONFIG $* "
2019-11-05 14:36:27 +01:00
export MAVEN_CMD_LINE_ARGS
2017-02-02 15:26:11 +01:00
WRAPPER_LAUNCHER = org.apache.maven.wrapper.MavenWrapperMain
2023-04-03 14:49:48 +02:00
# shellcheck disable=SC2086 # safe args
2017-02-02 15:26:11 +01:00
exec " $JAVACMD " \
$MAVEN_OPTS \
2022-01-10 14:13:36 +01:00
$MAVEN_DEBUG_OPTS \
2017-02-02 15:26:11 +01:00
-classpath " $MAVEN_PROJECTBASEDIR /.mvn/wrapper/maven-wrapper.jar" \
2022-01-10 14:13:36 +01:00
"-Dmaven.multiModuleProjectDirectory= ${ MAVEN_PROJECTBASEDIR } " \
2017-04-23 12:09:39 +02:00
${ WRAPPER_LAUNCHER } $MAVEN_CONFIG " $@ "