blob: 8d937f4c14f11f8c3aded556054af0b0097eaede [file] [log] [blame]
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +01001#!/bin/sh
2# ----------------------------------------------------------------------------
3# Licensed to the Apache Software Foundation (ASF) under one
4# or more contributor license agreements. See the NOTICE file
5# distributed with this work for additional information
6# regarding copyright ownership. The ASF licenses this file
7# to you under the Apache License, Version 2.0 (the
8# "License"); you may not use this file except in compliance
9# with the License. You may obtain a copy of the License at
10#
11# http://www.apache.org/licenses/LICENSE-2.0
12#
13# Unless required by applicable law or agreed to in writing,
14# software distributed under the License is distributed on an
15# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16# KIND, either express or implied. See the License for the
17# specific language governing permissions and limitations
18# under the License.
19# ----------------------------------------------------------------------------
20
21# ----------------------------------------------------------------------------
Matthias Andreas Benkard940eac52023-08-06 18:47:10 +020022# Apache Maven Wrapper startup batch script, version 3.2.0
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +010023#
24# Required ENV vars:
25# ------------------
26# JAVA_HOME - location of a JDK home dir
27#
28# Optional ENV vars
29# -----------------
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +010030# MAVEN_OPTS - parameters passed to the Java VM when running Maven
31# e.g. to debug Maven itself, use
32# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
33# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
34# ----------------------------------------------------------------------------
35
36if [ -z "$MAVEN_SKIP_RC" ] ; then
37
Matthias Andreas Benkard940eac52023-08-06 18:47:10 +020038 if [ -f /usr/local/etc/mavenrc ] ; then
39 . /usr/local/etc/mavenrc
40 fi
41
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +010042 if [ -f /etc/mavenrc ] ; then
43 . /etc/mavenrc
44 fi
45
46 if [ -f "$HOME/.mavenrc" ] ; then
47 . "$HOME/.mavenrc"
48 fi
49
50fi
51
52# OS specific support. $var _must_ be set to either true or false.
53cygwin=false;
54darwin=false;
55mingw=false
Matthias Andreas Benkard940eac52023-08-06 18:47:10 +020056case "$(uname)" in
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +010057 CYGWIN*) cygwin=true ;;
58 MINGW*) mingw=true;;
59 Darwin*) darwin=true
60 # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
61 # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
62 if [ -z "$JAVA_HOME" ]; then
63 if [ -x "/usr/libexec/java_home" ]; then
Matthias Andreas Benkard940eac52023-08-06 18:47:10 +020064 JAVA_HOME="$(/usr/libexec/java_home)"; export JAVA_HOME
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +010065 else
Matthias Andreas Benkard940eac52023-08-06 18:47:10 +020066 JAVA_HOME="/Library/Java/Home"; export JAVA_HOME
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +010067 fi
68 fi
69 ;;
70esac
71
72if [ -z "$JAVA_HOME" ] ; then
73 if [ -r /etc/gentoo-release ] ; then
Matthias Andreas Benkard940eac52023-08-06 18:47:10 +020074 JAVA_HOME=$(java-config --jre-home)
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +010075 fi
76fi
77
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +010078# For Cygwin, ensure paths are in UNIX format before anything is touched
79if $cygwin ; then
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +010080 [ -n "$JAVA_HOME" ] &&
Matthias Andreas Benkard940eac52023-08-06 18:47:10 +020081 JAVA_HOME=$(cygpath --unix "$JAVA_HOME")
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +010082 [ -n "$CLASSPATH" ] &&
Matthias Andreas Benkard940eac52023-08-06 18:47:10 +020083 CLASSPATH=$(cygpath --path --unix "$CLASSPATH")
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +010084fi
85
86# For Mingw, ensure paths are in UNIX format before anything is touched
87if $mingw ; then
Matthias Andreas Benkard940eac52023-08-06 18:47:10 +020088 [ -n "$JAVA_HOME" ] && [ -d "$JAVA_HOME" ] &&
89 JAVA_HOME="$(cd "$JAVA_HOME" || (echo "cannot cd into $JAVA_HOME."; exit 1); pwd)"
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +010090fi
91
92if [ -z "$JAVA_HOME" ]; then
Matthias Andreas Benkard940eac52023-08-06 18:47:10 +020093 javaExecutable="$(which javac)"
94 if [ -n "$javaExecutable" ] && ! [ "$(expr "\"$javaExecutable\"" : '\([^ ]*\)')" = "no" ]; then
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +010095 # readlink(1) is not available as standard on Solaris 10.
Matthias Andreas Benkard940eac52023-08-06 18:47:10 +020096 readLink=$(which readlink)
97 if [ ! "$(expr "$readLink" : '\([^ ]*\)')" = "no" ]; then
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +010098 if $darwin ; then
Matthias Andreas Benkard940eac52023-08-06 18:47:10 +020099 javaHome="$(dirname "\"$javaExecutable\"")"
100 javaExecutable="$(cd "\"$javaHome\"" && pwd -P)/javac"
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +0100101 else
Matthias Andreas Benkard940eac52023-08-06 18:47:10 +0200102 javaExecutable="$(readlink -f "\"$javaExecutable\"")"
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +0100103 fi
Matthias Andreas Benkard940eac52023-08-06 18:47:10 +0200104 javaHome="$(dirname "\"$javaExecutable\"")"
105 javaHome=$(expr "$javaHome" : '\(.*\)/bin')
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +0100106 JAVA_HOME="$javaHome"
107 export JAVA_HOME
108 fi
109 fi
110fi
111
112if [ -z "$JAVACMD" ] ; then
113 if [ -n "$JAVA_HOME" ] ; then
114 if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
115 # IBM's JDK on AIX uses strange locations for the executables
116 JAVACMD="$JAVA_HOME/jre/sh/java"
117 else
118 JAVACMD="$JAVA_HOME/bin/java"
119 fi
120 else
Matthias Andreas Benkard940eac52023-08-06 18:47:10 +0200121 JAVACMD="$(\unset -f command 2>/dev/null; \command -v java)"
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +0100122 fi
123fi
124
125if [ ! -x "$JAVACMD" ] ; then
126 echo "Error: JAVA_HOME is not defined correctly." >&2
127 echo " We cannot execute $JAVACMD" >&2
128 exit 1
129fi
130
131if [ -z "$JAVA_HOME" ] ; then
132 echo "Warning: JAVA_HOME environment variable is not set."
133fi
134
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +0100135# traverses directory structure from process work directory to filesystem root
136# first directory with .mvn subdirectory is considered project base directory
137find_maven_basedir() {
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +0100138 if [ -z "$1" ]
139 then
140 echo "Path not specified to find_maven_basedir"
141 return 1
142 fi
143
144 basedir="$1"
145 wdir="$1"
146 while [ "$wdir" != '/' ] ; do
147 if [ -d "$wdir"/.mvn ] ; then
148 basedir=$wdir
149 break
150 fi
151 # workaround for JBEAP-8937 (on Solaris 10/Sparc)
152 if [ -d "${wdir}" ]; then
Matthias Andreas Benkard940eac52023-08-06 18:47:10 +0200153 wdir=$(cd "$wdir/.." || exit 1; pwd)
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +0100154 fi
155 # end of workaround
156 done
Matthias Andreas Benkard940eac52023-08-06 18:47:10 +0200157 printf '%s' "$(cd "$basedir" || exit 1; pwd)"
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +0100158}
159
160# concatenates all lines of a file
161concat_lines() {
162 if [ -f "$1" ]; then
Matthias Andreas Benkard940eac52023-08-06 18:47:10 +0200163 # Remove \r in case we run on Windows within Git Bash
164 # and check out the repository with auto CRLF management
165 # enabled. Otherwise, we may read lines that are delimited with
166 # \r\n and produce $'-Xarg\r' rather than -Xarg due to word
167 # splitting rules.
168 tr -s '\r\n' ' ' < "$1"
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +0100169 fi
170}
171
Matthias Andreas Benkard940eac52023-08-06 18:47:10 +0200172log() {
173 if [ "$MVNW_VERBOSE" = true ]; then
174 printf '%s\n' "$1"
175 fi
176}
177
178BASE_DIR=$(find_maven_basedir "$(dirname "$0")")
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +0100179if [ -z "$BASE_DIR" ]; then
180 exit 1;
181fi
182
Matthias Andreas Benkard940eac52023-08-06 18:47:10 +0200183MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}; export MAVEN_PROJECTBASEDIR
184log "$MAVEN_PROJECTBASEDIR"
185
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +0100186##########################################################################################
187# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
188# This allows using the maven wrapper in projects that prohibit checking in binary data.
189##########################################################################################
Matthias Andreas Benkard940eac52023-08-06 18:47:10 +0200190wrapperJarPath="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar"
191if [ -r "$wrapperJarPath" ]; then
192 log "Found $wrapperJarPath"
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +0100193else
Matthias Andreas Benkard940eac52023-08-06 18:47:10 +0200194 log "Couldn't find $wrapperJarPath, downloading it ..."
195
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +0100196 if [ -n "$MVNW_REPOURL" ]; then
Matthias Andreas Benkard940eac52023-08-06 18:47:10 +0200197 wrapperUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +0100198 else
Matthias Andreas Benkard940eac52023-08-06 18:47:10 +0200199 wrapperUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +0100200 fi
Matthias Andreas Benkard940eac52023-08-06 18:47:10 +0200201 while IFS="=" read -r key value; do
202 # 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 '=' )
203 safeValue=$(echo "$value" | tr -d '\r')
204 case "$key" in (wrapperUrl) wrapperUrl="$safeValue"; break ;;
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +0100205 esac
Matthias Andreas Benkard940eac52023-08-06 18:47:10 +0200206 done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties"
207 log "Downloading from: $wrapperUrl"
208
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +0100209 if $cygwin; then
Matthias Andreas Benkard940eac52023-08-06 18:47:10 +0200210 wrapperJarPath=$(cygpath --path --windows "$wrapperJarPath")
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +0100211 fi
212
213 if command -v wget > /dev/null; then
Matthias Andreas Benkard940eac52023-08-06 18:47:10 +0200214 log "Found wget ... using wget"
215 [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--quiet"
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +0100216 if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
Matthias Andreas Benkard940eac52023-08-06 18:47:10 +0200217 wget $QUIET "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +0100218 else
Matthias Andreas Benkard940eac52023-08-06 18:47:10 +0200219 wget $QUIET --http-user="$MVNW_USERNAME" --http-password="$MVNW_PASSWORD" "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +0100220 fi
221 elif command -v curl > /dev/null; then
Matthias Andreas Benkard940eac52023-08-06 18:47:10 +0200222 log "Found curl ... using curl"
223 [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--silent"
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +0100224 if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
Matthias Andreas Benkard940eac52023-08-06 18:47:10 +0200225 curl $QUIET -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath"
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +0100226 else
Matthias Andreas Benkard940eac52023-08-06 18:47:10 +0200227 curl $QUIET --user "$MVNW_USERNAME:$MVNW_PASSWORD" -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath"
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +0100228 fi
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +0100229 else
Matthias Andreas Benkard940eac52023-08-06 18:47:10 +0200230 log "Falling back to using Java to download"
231 javaSource="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.java"
232 javaClass="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.class"
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +0100233 # For Cygwin, switch paths to Windows format before running javac
234 if $cygwin; then
Matthias Andreas Benkard940eac52023-08-06 18:47:10 +0200235 javaSource=$(cygpath --path --windows "$javaSource")
236 javaClass=$(cygpath --path --windows "$javaClass")
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +0100237 fi
Matthias Andreas Benkard940eac52023-08-06 18:47:10 +0200238 if [ -e "$javaSource" ]; then
239 if [ ! -e "$javaClass" ]; then
240 log " - Compiling MavenWrapperDownloader.java ..."
241 ("$JAVA_HOME/bin/javac" "$javaSource")
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +0100242 fi
Matthias Andreas Benkard940eac52023-08-06 18:47:10 +0200243 if [ -e "$javaClass" ]; then
244 log " - Running MavenWrapperDownloader.java ..."
245 ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$wrapperUrl" "$wrapperJarPath") || rm -f "$wrapperJarPath"
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +0100246 fi
247 fi
248 fi
249fi
250##########################################################################################
251# End of extension
252##########################################################################################
253
Matthias Andreas Benkard940eac52023-08-06 18:47:10 +0200254# If specified, validate the SHA-256 sum of the Maven wrapper jar file
255wrapperSha256Sum=""
256while IFS="=" read -r key value; do
257 case "$key" in (wrapperSha256Sum) wrapperSha256Sum=$value; break ;;
258 esac
259done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties"
260if [ -n "$wrapperSha256Sum" ]; then
261 wrapperSha256Result=false
262 if command -v sha256sum > /dev/null; then
263 if echo "$wrapperSha256Sum $wrapperJarPath" | sha256sum -c > /dev/null 2>&1; then
264 wrapperSha256Result=true
265 fi
266 elif command -v shasum > /dev/null; then
267 if echo "$wrapperSha256Sum $wrapperJarPath" | shasum -a 256 -c > /dev/null 2>&1; then
268 wrapperSha256Result=true
269 fi
270 else
271 echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available."
272 echo "Please install either command, or disable validation by removing 'wrapperSha256Sum' from your maven-wrapper.properties."
273 exit 1
274 fi
275 if [ $wrapperSha256Result = false ]; then
276 echo "Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised." >&2
277 echo "Investigate or delete $wrapperJarPath to attempt a clean download." >&2
278 echo "If you updated your Maven version, you need to update the specified wrapperSha256Sum property." >&2
279 exit 1
280 fi
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +0100281fi
Matthias Andreas Benkard940eac52023-08-06 18:47:10 +0200282
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +0100283MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
284
285# For Cygwin, switch paths to Windows format before running java
286if $cygwin; then
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +0100287 [ -n "$JAVA_HOME" ] &&
Matthias Andreas Benkard940eac52023-08-06 18:47:10 +0200288 JAVA_HOME=$(cygpath --path --windows "$JAVA_HOME")
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +0100289 [ -n "$CLASSPATH" ] &&
Matthias Andreas Benkard940eac52023-08-06 18:47:10 +0200290 CLASSPATH=$(cygpath --path --windows "$CLASSPATH")
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +0100291 [ -n "$MAVEN_PROJECTBASEDIR" ] &&
Matthias Andreas Benkard940eac52023-08-06 18:47:10 +0200292 MAVEN_PROJECTBASEDIR=$(cygpath --path --windows "$MAVEN_PROJECTBASEDIR")
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +0100293fi
294
295# Provide a "standardized" way to retrieve the CLI args that will
296# work with both Windows and non-Windows executions.
Matthias Andreas Benkard940eac52023-08-06 18:47:10 +0200297MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $*"
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +0100298export MAVEN_CMD_LINE_ARGS
299
300WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
301
Matthias Andreas Benkard940eac52023-08-06 18:47:10 +0200302# shellcheck disable=SC2086 # safe args
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +0100303exec "$JAVACMD" \
304 $MAVEN_OPTS \
Matthias Andreas Benkard940eac52023-08-06 18:47:10 +0200305 $MAVEN_DEBUG_OPTS \
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +0100306 -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
Matthias Andreas Benkard940eac52023-08-06 18:47:10 +0200307 "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
Matthias Andreas Benkard2ebeae12020-03-15 12:40:25 +0100308 ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"