| 
 | 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 | +#    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 | + | 
 | 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" ] && [ -d "$JAVA_HOME" ] &&  | 
 | 89 | +    JAVA_HOME="$(cd "$JAVA_HOME" || (echo "cannot cd into $JAVA_HOME."; exit 1); 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 2>/dev/null; \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/.." || 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  | 
 | 161 | +concat_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 | + | 
 | 172 | +log() {  | 
 | 173 | +  if [ "$MVNW_VERBOSE" = true ]; then  | 
 | 174 | +    printf '%s\n' "$1"  | 
 | 175 | +  fi  | 
 | 176 | +}  | 
 | 177 | + | 
 | 178 | +BASE_DIR=$(find_maven_basedir "$(dirname "$0")")  | 
 | 179 | +if [ -z "$BASE_DIR" ]; then  | 
 | 180 | +  exit 1;  | 
 | 181 | +fi  | 
 | 182 | + | 
 | 183 | +MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}; export MAVEN_PROJECTBASEDIR  | 
 | 184 | +log "$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 | +##########################################################################################  | 
 | 190 | +wrapperJarPath="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar"  | 
 | 191 | +if [ -r "$wrapperJarPath" ]; then  | 
 | 192 | +    log "Found $wrapperJarPath"  | 
 | 193 | +else  | 
 | 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  | 
 | 249 | +fi  | 
 | 250 | +##########################################################################################  | 
 | 251 | +# End of extension  | 
 | 252 | +##########################################################################################  | 
 | 253 | + | 
 | 254 | +# If specified, validate the SHA-256 sum of the Maven wrapper jar file  | 
 | 255 | +wrapperSha256Sum=""  | 
 | 256 | +while IFS="=" read -r key value; do  | 
 | 257 | +  case "$key" in (wrapperSha256Sum) wrapperSha256Sum=$value; break ;;  | 
 | 258 | +  esac  | 
 | 259 | +done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties"  | 
 | 260 | +if [ -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  | 
 | 281 | +fi  | 
 | 282 | + | 
 | 283 | +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"  | 
 | 284 | + | 
 | 285 | +# For Cygwin, switch paths to Windows format before running java  | 
 | 286 | +if $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")  | 
 | 293 | +fi  | 
 | 294 | + | 
 | 295 | +# Provide a "standardized" way to retrieve the CLI args that will  | 
 | 296 | +# work with both Windows and non-Windows executions.  | 
 | 297 | +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $*"  | 
 | 298 | +export MAVEN_CMD_LINE_ARGS  | 
 | 299 | + | 
 | 300 | +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain  | 
 | 301 | + | 
 | 302 | +# shellcheck disable=SC2086 # safe args  | 
 | 303 | +exec "$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 "$@"  | 
0 commit comments