1 #!/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 # https://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.1.1
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
36 if [ -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
50 fi
51
52 # OS specific support. $var _must_ be set to either true or false.
53 cygwin=false;
54 darwin=false;
55 mingw=false
56 case "`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 ;;
70 esac
71
72 if [ -z "$JAVA_HOME" ] ; then
73 if [ -r /etc/gentoo-release ] ; then
74 JAVA_HOME=`java-config --jre-home`
75 fi
76 fi
77
78 # For Cygwin, ensure paths are in UNIX format before anything is touched
79 if $cygwin ; then
80 [ -n "$JAVA_HOME" ] &&
81 JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
82 [ -n "$CLASSPATH" ] &&
83 CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
84 fi
85
86 # For Mingw, ensure paths are in UNIX format before anything is touched
87 if $mingw ; then
88 [ -n "$JAVA_HOME" ] &&
89 JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
90 fi
91
92 if [ -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
110 fi
111
112 if [ -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; \\command -v java`"
122 fi
123 fi
124
125 if [ ! -x "$JAVACMD" ] ; then
126 echo "Error: JAVA_HOME is not defined correctly." >&2
127 echo " We cannot execute $JAVACMD" >&2
128 exit 1
129 fi
130
131 if [ -z "$JAVA_HOME" ] ; then
132 echo "Warning: JAVA_HOME environment variable is not set."
133 fi
134
135 # traverses directory structure from process work directory to filesystem root
136 # first directory with .mvn subdirectory is considered project base directory
137 find_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/.."; pwd`
154 fi
155 # end of workaround
156 done
157 printf '%s' "$(cd "$basedir"; pwd)"
158 }
159
160 # concatenates all lines of a file
161 concat_lines() {
162 if [ -f "$1" ]; then
163 echo "$(tr -s '\n' ' ' < "$1")"
164 fi
165 }
166
167 BASE_DIR=$(find_maven_basedir "$(dirname $0)")
168 if [ -z "$BASE_DIR" ]; then
169 exit 1;
170 fi
171
172 MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}; export MAVEN_PROJECTBASEDIR
173 if [ "$MVNW_VERBOSE" = true ]; then
174 echo $MAVEN_PROJECTBASEDIR
175 fi
176
177 ##########################################################################################
178 # Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
179 # This allows using the maven wrapper in projects that prohibit checking in binary data.
180 ##########################################################################################
181 if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
182 if [ "$MVNW_VERBOSE" = true ]; then
183 echo "Found .mvn/wrapper/maven-wrapper.jar"
184 fi
185 else
186 if [ "$MVNW_VERBOSE" = true ]; then
187 echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
188 fi
189 if [ -n "$MVNW_REPOURL" ]; then
190 wrapperUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar"
191 else
192 wrapperUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar"
193 fi
194 while IFS="=" read key value; do
195 case "$key" in (wrapperUrl) wrapperUrl="$value"; break ;;
196 esac
197 done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
198 if [ "$MVNW_VERBOSE" = true ]; then
199 echo "Downloading from: $wrapperUrl"
200 fi
201 wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
202 if $cygwin; then
203 wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
204 fi
205
206 if command -v wget > /dev/null; then
207 QUIET="--quiet"
208 if [ "$MVNW_VERBOSE" = true ]; then
209 echo "Found wget ... using wget"
210 QUIET=""
211 fi
212 if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
213 wget $QUIET "$wrapperUrl" -O "$wrapperJarPath"
214 else
215 wget $QUIET --http-user="$MVNW_USERNAME" --http-password="$MVNW_PASSWORD" "$wrapperUrl" -O "$wrapperJarPath"
216 fi
217 [ $? -eq 0 ] || rm -f "$wrapperJarPath"
218 elif command -v curl > /dev/null; then
219 QUIET="--silent"
220 if [ "$MVNW_VERBOSE" = true ]; then
221 echo "Found curl ... using curl"
222 QUIET=""
223 fi
224 if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
225 curl $QUIET -o "$wrapperJarPath" "$wrapperUrl" -f -L
226 else
227 curl $QUIET --user "$MVNW_USERNAME:$MVNW_PASSWORD" -o "$wrapperJarPath" "$wrapperUrl" -f -L
228 fi
229 [ $? -eq 0 ] || rm -f "$wrapperJarPath"
230 else
231 if [ "$MVNW_VERBOSE" = true ]; then
232 echo "Falling back to using Java to download"
233 fi
234 javaSource="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
235 javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class"
236 # For Cygwin, switch paths to Windows format before running javac
237 if $cygwin; then
238 javaSource=`cygpath --path --windows "$javaSource"`
239 javaClass=`cygpath --path --windows "$javaClass"`
240 fi
241 if [ -e "$javaSource" ]; then
242 if [ ! -e "$javaClass" ]; then
243 if [ "$MVNW_VERBOSE" = true ]; then
244 echo " - Compiling MavenWrapperDownloader.java ..."
245 fi
246 # Compiling the Java class
247 ("$JAVA_HOME/bin/javac" "$javaSource")
248 fi
249 if [ -e "$javaClass" ]; then
250 # Running the downloader
251 if [ "$MVNW_VERBOSE" = true ]; then
252 echo " - Running MavenWrapperDownloader.java ..."
253 fi
254 ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
255 fi
256 fi
257 fi
258 fi
259 ##########################################################################################
260 # End of extension
261 ##########################################################################################
262
263 MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
264
265 # For Cygwin, switch paths to Windows format before running java
266 if $cygwin; then
267 [ -n "$JAVA_HOME" ] &&
268 JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
269 [ -n "$CLASSPATH" ] &&
270 CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
271 [ -n "$MAVEN_PROJECTBASEDIR" ] &&
272 MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
273 fi
274
275 # Provide a "standardized" way to retrieve the CLI args that will
276 # work with both Windows and non-Windows executions.
277 MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
278 export MAVEN_CMD_LINE_ARGS
279
280 WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
281
282 exec "$JAVACMD" \
283 $MAVEN_OPTS \
284 $MAVEN_DEBUG_OPTS \
285 -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
286 "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
287 ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"