1919# ----------------------------------------------------------------------------
2020
2121# ----------------------------------------------------------------------------
22- # Apache Maven Wrapper startup batch script, version 3.1.1
22+ # Apache Maven Wrapper startup batch script, version 3.2.0
2323#
2424# Required ENV vars:
2525# ------------------
5353cygwin=false;
5454darwin=false;
5555mingw=false
56- case " ` uname` " in
56+ case " $( uname) " in
5757 CYGWIN* ) cygwin=true ;;
5858 MINGW* ) mingw=true;;
5959 Darwin* ) darwin=true
6060 # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
6161 # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
6262 if [ -z " $JAVA_HOME " ]; then
6363 if [ -x " /usr/libexec/java_home" ]; then
64- JAVA_HOME=" ` /usr/libexec/java_home` " ; export JAVA_HOME
64+ JAVA_HOME=" $( /usr/libexec/java_home) " ; export JAVA_HOME
6565 else
6666 JAVA_HOME=" /Library/Java/Home" ; export JAVA_HOME
6767 fi
7171
7272if [ -z " $JAVA_HOME " ] ; then
7373 if [ -r /etc/gentoo-release ] ; then
74- JAVA_HOME=` java-config --jre-home`
74+ JAVA_HOME=$( java-config --jre-home)
7575 fi
7676fi
7777
7878# For Cygwin, ensure paths are in UNIX format before anything is touched
7979if $cygwin ; then
8080 [ -n " $JAVA_HOME " ] &&
81- JAVA_HOME=` cygpath --unix " $JAVA_HOME " `
81+ JAVA_HOME=$( cygpath --unix " $JAVA_HOME " )
8282 [ -n " $CLASSPATH " ] &&
83- CLASSPATH=` cygpath --path --unix " $CLASSPATH " `
83+ CLASSPATH=$( cygpath --path --unix " $CLASSPATH " )
8484fi
8585
8686# For Mingw, ensure paths are in UNIX format before anything is touched
8787if $mingw ; then
88- [ -n " $JAVA_HOME " ] &&
89- JAVA_HOME=" ` (cd " $JAVA_HOME " ; pwd)` "
88+ [ -n " $JAVA_HOME " ] && [ -d " $JAVA_HOME " ] &&
89+ JAVA_HOME=" $ ( cd " $JAVA_HOME " || (echo " cannot cd into $JAVA_HOME . " ; exit 1) ; pwd) "
9090fi
9191
9292if [ -z " $JAVA_HOME " ]; then
93- javaExecutable=" ` which javac` "
94- if [ -n " $javaExecutable " ] && ! [ " ` expr \" $javaExecutable \" : ' \([^ ]*\)' ` " = " no" ]; then
93+ javaExecutable=" $( which javac) "
94+ if [ -n " $javaExecutable " ] && ! [ " $( expr " \" $javaExecutable \" " : ' \([^ ]*\)' ) " = " no" ]; then
9595 # readlink(1) is not available as standard on Solaris 10.
96- readLink=` which readlink`
97- if [ ! ` expr " $readLink " : ' \([^ ]*\)' ` = " no" ]; then
96+ readLink=$( which readlink)
97+ if [ ! " $( expr " $readLink " : ' \([^ ]*\)' ) " = " no" ]; then
9898 if $darwin ; then
99- javaHome=" ` dirname \" $javaExecutable \" ` "
100- javaExecutable=" ` cd \" $javaHome \" && pwd -P` /javac"
99+ javaHome=" $( dirname " \" $javaExecutable \" " ) "
100+ javaExecutable=" $( cd " \" $javaHome \" " && pwd -P) /javac"
101101 else
102- javaExecutable=" ` readlink -f \" $javaExecutable \" ` "
102+ javaExecutable=" $( readlink -f " \" $javaExecutable \" " ) "
103103 fi
104- javaHome=" ` dirname \" $javaExecutable \" ` "
105- javaHome=` expr " $javaHome " : ' \(.*\)/bin' `
104+ javaHome=" $( dirname " \" $javaExecutable \" " ) "
105+ javaHome=$( expr " $javaHome " : ' \(.*\)/bin' )
106106 JAVA_HOME=" $javaHome "
107107 export JAVA_HOME
108108 fi
@@ -118,7 +118,7 @@ if [ -z "$JAVACMD" ] ; then
118118 JAVACMD=" $JAVA_HOME /bin/java"
119119 fi
120120 else
121- JAVACMD=" ` \\ unset -f command ; \\ command -v java` "
121+ JAVACMD=" $( \ u nset -f command 2> /dev/null ; \c ommand -v java) "
122122 fi
123123fi
124124
@@ -150,108 +150,99 @@ find_maven_basedir() {
150150 fi
151151 # workaround for JBEAP-8937 (on Solaris 10/Sparc)
152152 if [ -d " ${wdir} " ]; then
153- wdir=` cd " $wdir /.." ; pwd`
153+ wdir=$( cd " $wdir /.." || exit 1 ; pwd)
154154 fi
155155 # end of workaround
156156 done
157- printf ' %s' " $( cd " $basedir " ; pwd) "
157+ printf ' %s' " $( cd " $basedir " || exit 1 ; pwd) "
158158}
159159
160160# concatenates all lines of a file
161161concat_lines () {
162162 if [ -f " $1 " ]; then
163- echo " $( tr -s ' \n' ' ' < " $1 " ) "
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 "
164169 fi
165170}
166171
167- BASE_DIR=$( find_maven_basedir " $( dirname $0 ) " )
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 " ) " )
168179if [ -z " $BASE_DIR " ]; then
169180 exit 1;
170181fi
171182
172183MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:- " $BASE_DIR " } ; export MAVEN_PROJECTBASEDIR
173- if [ " $MVNW_VERBOSE " = true ]; then
174- echo $MAVEN_PROJECTBASEDIR
175- fi
184+ log " $MAVEN_PROJECTBASEDIR "
176185
177186# #########################################################################################
178187# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
179188# This allows using the maven wrapper in projects that prohibit checking in binary data.
180189# #########################################################################################
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
190+ wrapperJarPath=" $MAVEN_PROJECTBASEDIR /.mvn/wrapper/maven-wrapper.jar"
191+ if [ -r " $wrapperJarPath " ]; then
192+ log " Found $wrapperJarPath "
185193else
186- if [ " $MVNW_VERBOSE " = true ]; then
187- echo " Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
188- fi
194+ log " Couldn't find $wrapperJarPath , downloading it ..."
195+
189196 if [ -n " $MVNW_REPOURL " ]; then
190- wrapperUrl=" $MVNW_REPOURL /org/apache/maven/wrapper/maven-wrapper/3.1.1 /maven-wrapper-3.1.1 .jar"
197+ wrapperUrl=" $MVNW_REPOURL /org/apache/maven/wrapper/maven-wrapper/3.2.0 /maven-wrapper-3.2.0 .jar"
191198 else
192- wrapperUrl=" https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.1 /maven-wrapper-3.1.1 .jar"
199+ wrapperUrl=" https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0 /maven-wrapper-3.2.0 .jar"
193200 fi
194- while IFS=" =" read key value; do
195- case " $key " in (wrapperUrl) wrapperUrl=" $value " ; break ;;
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 ;;
196205 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"
206+ done < " $MAVEN_PROJECTBASEDIR /.mvn/wrapper/maven-wrapper.properties"
207+ log " Downloading from: $wrapperUrl "
208+
202209 if $cygwin ; then
203- wrapperJarPath=` cygpath --path --windows " $wrapperJarPath " `
210+ wrapperJarPath=$( cygpath --path --windows " $wrapperJarPath " )
204211 fi
205212
206213 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
214+ log " Found wget ... using wget"
215+ [ " $MVNW_VERBOSE " = true ] && QUIET=" " || QUIET=" --quiet"
212216 if [ -z " $MVNW_USERNAME " ] || [ -z " $MVNW_PASSWORD " ]; then
213- wget $QUIET " $wrapperUrl " -O " $wrapperJarPath "
217+ wget $QUIET " $wrapperUrl " -O " $wrapperJarPath " || rm -f " $wrapperJarPath "
214218 else
215- wget $QUIET --http-user=" $MVNW_USERNAME " --http-password=" $MVNW_PASSWORD " " $wrapperUrl " -O " $wrapperJarPath "
219+ wget $QUIET --http-user=" $MVNW_USERNAME " --http-password=" $MVNW_PASSWORD " " $wrapperUrl " -O " $wrapperJarPath " || rm -f " $wrapperJarPath "
216220 fi
217- [ $? -eq 0 ] || rm -f " $wrapperJarPath "
218221 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
222+ log " Found curl ... using curl"
223+ [ " $MVNW_VERBOSE " = true ] && QUIET=" " || QUIET=" --silent"
224224 if [ -z " $MVNW_USERNAME " ] || [ -z " $MVNW_PASSWORD " ]; then
225- curl $QUIET -o " $wrapperJarPath " " $wrapperUrl " -f -L
225+ curl $QUIET -o " $wrapperJarPath " " $wrapperUrl " -f -L || rm -f " $wrapperJarPath "
226226 else
227- curl $QUIET --user " $MVNW_USERNAME :$MVNW_PASSWORD " -o " $wrapperJarPath " " $wrapperUrl " -f -L
227+ curl $QUIET --user " $MVNW_USERNAME :$MVNW_PASSWORD " -o " $wrapperJarPath " " $wrapperUrl " -f -L || rm -f " $wrapperJarPath "
228228 fi
229- [ $? -eq 0 ] || rm -f " $wrapperJarPath "
230229 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"
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"
236233 # For Cygwin, switch paths to Windows format before running javac
237234 if $cygwin ; then
238- javaSource=` cygpath --path --windows " $javaSource " `
239- javaClass=` cygpath --path --windows " $javaClass " `
235+ javaSource=$( cygpath --path --windows " $javaSource " )
236+ javaClass=$( cygpath --path --windows " $javaClass " )
240237 fi
241238 if [ -e " $javaSource " ]; then
242239 if [ ! -e " $javaClass " ]; then
243- if [ " $MVNW_VERBOSE " = true ]; then
244- echo " - Compiling MavenWrapperDownloader.java ..."
245- fi
246- # Compiling the Java class
240+ log " - Compiling MavenWrapperDownloader.java ..."
247241 (" $JAVA_HOME /bin/javac" " $javaSource " )
248242 fi
249243 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 " )
244+ log " - Running MavenWrapperDownloader.java ..."
245+ (" $JAVA_HOME /bin/java" -cp .mvn/wrapper MavenWrapperDownloader " $wrapperUrl " " $wrapperJarPath " ) || rm -f " $wrapperJarPath "
255246 fi
256247 fi
257248 fi
260251# End of extension
261252# #########################################################################################
262253
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+
263283MAVEN_OPTS=" $( concat_lines " $MAVEN_PROJECTBASEDIR /.mvn/jvm.config" ) $MAVEN_OPTS "
264284
265285# For Cygwin, switch paths to Windows format before running java
266286if $cygwin ; then
267287 [ -n " $JAVA_HOME " ] &&
268- JAVA_HOME=` cygpath --path --windows " $JAVA_HOME " `
288+ JAVA_HOME=$( cygpath --path --windows " $JAVA_HOME " )
269289 [ -n " $CLASSPATH " ] &&
270- CLASSPATH=` cygpath --path --windows " $CLASSPATH " `
290+ CLASSPATH=$( cygpath --path --windows " $CLASSPATH " )
271291 [ -n " $MAVEN_PROJECTBASEDIR " ] &&
272- MAVEN_PROJECTBASEDIR=` cygpath --path --windows " $MAVEN_PROJECTBASEDIR " `
292+ MAVEN_PROJECTBASEDIR=$( cygpath --path --windows " $MAVEN_PROJECTBASEDIR " )
273293fi
274294
275295# Provide a "standardized" way to retrieve the CLI args that will
276296# work with both Windows and non-Windows executions.
277- MAVEN_CMD_LINE_ARGS=" $MAVEN_CONFIG $@ "
297+ MAVEN_CMD_LINE_ARGS=" $MAVEN_CONFIG $* "
278298export MAVEN_CMD_LINE_ARGS
279299
280300WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
281301
302+ # shellcheck disable=SC2086 # safe args
282303exec " $JAVACMD " \
283304 $MAVEN_OPTS \
284305 $MAVEN_DEBUG_OPTS \
0 commit comments