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 "$@"