blob: 8d937f4c14f11f8c3aded556054af0b0097eaede [file] [log] [blame]
Matthias Andreas Benkard53f64232023-09-30 20:18:55 +02001#!/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# ----------------------------------------------------------------------------
22# Apache Maven Wrapper startup batch script, version 3.2.0
23#
24# Required ENV vars:
25# ------------------
26# JAVA_HOME - location of a JDK home dir
27#
28# Optional ENV vars
29# -----------------
30# 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
38 if [ -f /usr/local/etc/mavenrc ] ; then
39 . /usr/local/etc/mavenrc
40 fi
41
42 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
56case "$(uname)" in
57 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
64 JAVA_HOME="$(/usr/libexec/java_home)"; export JAVA_HOME
65 else
66 JAVA_HOME="/Library/Java/Home"; export JAVA_HOME
67 fi
68 fi
69 ;;
70esac
71
72if [ -z "$JAVA_HOME" ] ; then
73 if [ -r /etc/gentoo-release ] ; then
74 JAVA_HOME=$(java-config --jre-home)
75 fi
76fi
77
78# For Cygwin, ensure paths are in UNIX format before anything is touched
79if $cygwin ; then
80 [ -n "$JAVA_HOME" ] &&
81 JAVA_HOME=$(cygpath --unix "$JAVA_HOME")
82 [ -n "$CLASSPATH" ] &&
83 CLASSPATH=$(cygpath --path --unix "$CLASSPATH")
84fi
85
86# For Mingw, ensure paths are in UNIX format before anything is touched
87if $mingw ; then
88 [ -n "$JAVA_HOME" ] && [ -d "$JAVA_HOME" ] &&
89 JAVA_HOME="$(cd "$JAVA_HOME" || (echo "cannot cd into $JAVA_HOME."; exit 1); pwd)"
90fi
91
92if [ -z "$JAVA_HOME" ]; then
93 javaExecutable="$(which javac)"
94 if [ -n "$javaExecutable" ] && ! [ "$(expr "\"$javaExecutable\"" : '\([^ ]*\)')" = "no" ]; then
95 # readlink(1) is not available as standard on Solaris 10.
96 readLink=$(which readlink)
97 if [ ! "$(expr "$readLink" : '\([^ ]*\)')" = "no" ]; then
98 if $darwin ; then
99 javaHome="$(dirname "\"$javaExecutable\"")"
100 javaExecutable="$(cd "\"$javaHome\"" && pwd -P)/javac"
101 else
102 javaExecutable="$(readlink -f "\"$javaExecutable\"")"
103 fi
104 javaHome="$(dirname "\"$javaExecutable\"")"
105 javaHome=$(expr "$javaHome" : '\(.*\)/bin')
106 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
121 JAVACMD="$(\unset -f command 2>/dev/null; \command -v java)"
122 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
135# traverses directory structure from process work directory to filesystem root
136# first directory with .mvn subdirectory is considered project base directory
137find_maven_basedir() {
138 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
153 wdir=$(cd "$wdir/.." || exit 1; pwd)
154 fi
155 # end of workaround
156 done
157 printf '%s' "$(cd "$basedir" || exit 1; pwd)"
158}
159
160# concatenates all lines of a file
161concat_lines() {
162 if [ -f "$1" ]; then
163 # 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"
169 fi
170}
171
172log() {
173 if [ "$MVNW_VERBOSE" = true ]; then
174 printf '%s\n' "$1"
175 fi
176}
177
178BASE_DIR=$(find_maven_basedir "$(dirname "$0")")
179if [ -z "$BASE_DIR" ]; then
180 exit 1;
181fi
182
183MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}; export MAVEN_PROJECTBASEDIR
184log "$MAVEN_PROJECTBASEDIR"
185
186##########################################################################################
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##########################################################################################
190wrapperJarPath="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar"
191if [ -r "$wrapperJarPath" ]; then
192 log "Found $wrapperJarPath"
193else
194 log "Couldn't find $wrapperJarPath, downloading it ..."
195
196 if [ -n "$MVNW_REPOURL" ]; then
197 wrapperUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
198 else
199 wrapperUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
200 fi
201 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 ;;
205 esac
206 done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties"
207 log "Downloading from: $wrapperUrl"
208
209 if $cygwin; then
210 wrapperJarPath=$(cygpath --path --windows "$wrapperJarPath")
211 fi
212
213 if command -v wget > /dev/null; then
214 log "Found wget ... using wget"
215 [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--quiet"
216 if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
217 wget $QUIET "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
218 else
219 wget $QUIET --http-user="$MVNW_USERNAME" --http-password="$MVNW_PASSWORD" "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
220 fi
221 elif command -v curl > /dev/null; then
222 log "Found curl ... using curl"
223 [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--silent"
224 if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
225 curl $QUIET -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath"
226 else
227 curl $QUIET --user "$MVNW_USERNAME:$MVNW_PASSWORD" -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath"
228 fi
229 else
230 log "Falling back to using Java to download"
231 javaSource="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.java"
232 javaClass="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.class"
233 # For Cygwin, switch paths to Windows format before running javac
234 if $cygwin; then
235 javaSource=$(cygpath --path --windows "$javaSource")
236 javaClass=$(cygpath --path --windows "$javaClass")
237 fi
238 if [ -e "$javaSource" ]; then
239 if [ ! -e "$javaClass" ]; then
240 log " - Compiling MavenWrapperDownloader.java ..."
241 ("$JAVA_HOME/bin/javac" "$javaSource")
242 fi
243 if [ -e "$javaClass" ]; then
244 log " - Running MavenWrapperDownloader.java ..."
245 ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$wrapperUrl" "$wrapperJarPath") || rm -f "$wrapperJarPath"
246 fi
247 fi
248 fi
249fi
250##########################################################################################
251# End of extension
252##########################################################################################
253
254# 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
281fi
282
283MAVEN_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
287 [ -n "$JAVA_HOME" ] &&
288 JAVA_HOME=$(cygpath --path --windows "$JAVA_HOME")
289 [ -n "$CLASSPATH" ] &&
290 CLASSPATH=$(cygpath --path --windows "$CLASSPATH")
291 [ -n "$MAVEN_PROJECTBASEDIR" ] &&
292 MAVEN_PROJECTBASEDIR=$(cygpath --path --windows "$MAVEN_PROJECTBASEDIR")
293fi
294
295# Provide a "standardized" way to retrieve the CLI args that will
296# work with both Windows and non-Windows executions.
297MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $*"
298export MAVEN_CMD_LINE_ARGS
299
300WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
301
302# shellcheck disable=SC2086 # safe args
303exec "$JAVACMD" \
304 $MAVEN_OPTS \
305 $MAVEN_DEBUG_OPTS \
306 -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
307 "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
308 ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"