xref: /aosp_15_r20/external/aws-sdk-java-v2/mvnw (revision 8a52c7834d808308836a99fc2a6e0ed8db339086)
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
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 "$@"
309