8
8
# "License"); you may not use this file except in compliance
9
9
# with the License. You may obtain a copy of the License at
10
10
#
11
- # https ://www.apache.org/licenses/LICENSE-2.0
11
+ # http ://www.apache.org/licenses/LICENSE-2.0
12
12
#
13
13
# Unless required by applicable law or agreed to in writing,
14
14
# software distributed under the License is distributed on an
19
19
# ----------------------------------------------------------------------------
20
20
21
21
# ----------------------------------------------------------------------------
22
- # Apache Maven Wrapper startup batch script, version 3.1.1
22
+ # Apache Maven Wrapper startup batch script, version 3.2.0
23
23
#
24
24
# Required ENV vars:
25
25
# ------------------
53
53
cygwin=false;
54
54
darwin=false;
55
55
mingw=false
56
- case " ` uname` " in
56
+ case " $( uname) " in
57
57
CYGWIN* ) cygwin=true ;;
58
58
MINGW* ) mingw=true;;
59
59
Darwin* ) darwin=true
60
60
# Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
61
61
# See https://developer.apple.com/library/mac/qa/qa1170/_index.html
62
62
if [ -z " $JAVA_HOME " ]; then
63
63
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
65
65
else
66
66
JAVA_HOME=" /Library/Java/Home" ; export JAVA_HOME
67
67
fi
71
71
72
72
if [ -z " $JAVA_HOME " ] ; then
73
73
if [ -r /etc/gentoo-release ] ; then
74
- JAVA_HOME=` java-config --jre-home`
74
+ JAVA_HOME=$( java-config --jre-home)
75
75
fi
76
76
fi
77
77
78
78
# For Cygwin, ensure paths are in UNIX format before anything is touched
79
79
if $cygwin ; then
80
80
[ -n " $JAVA_HOME " ] &&
81
- JAVA_HOME=` cygpath --unix " $JAVA_HOME " `
81
+ JAVA_HOME=$( cygpath --unix " $JAVA_HOME " )
82
82
[ -n " $CLASSPATH " ] &&
83
- CLASSPATH=` cygpath --path --unix " $CLASSPATH " `
83
+ CLASSPATH=$( cygpath --path --unix " $CLASSPATH " )
84
84
fi
85
85
86
86
# For Mingw, ensure paths are in UNIX format before anything is touched
87
87
if $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) "
90
90
fi
91
91
92
92
if [ -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
95
95
# 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
98
98
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"
101
101
else
102
- javaExecutable=" ` readlink -f \" $javaExecutable \" ` "
102
+ javaExecutable=" $( readlink -f " \" $javaExecutable \" " ) "
103
103
fi
104
- javaHome=" ` dirname \" $javaExecutable \" ` "
105
- javaHome=` expr " $javaHome " : ' \(.*\)/bin' `
104
+ javaHome=" $( dirname " \" $javaExecutable \" " ) "
105
+ javaHome=$( expr " $javaHome " : ' \(.*\)/bin' )
106
106
JAVA_HOME=" $javaHome "
107
107
export JAVA_HOME
108
108
fi
@@ -118,7 +118,7 @@ if [ -z "$JAVACMD" ] ; then
118
118
JAVACMD=" $JAVA_HOME /bin/java"
119
119
fi
120
120
else
121
- JAVACMD=" ` \\ unset -f command ; \\ command -v java` "
121
+ JAVACMD=" $( \ u nset -f command 2> /dev/null ; \c ommand -v java) "
122
122
fi
123
123
fi
124
124
@@ -150,108 +150,99 @@ find_maven_basedir() {
150
150
fi
151
151
# workaround for JBEAP-8937 (on Solaris 10/Sparc)
152
152
if [ -d " ${wdir} " ]; then
153
- wdir=` cd " $wdir /.." ; pwd`
153
+ wdir=$( cd " $wdir /.." || exit 1 ; pwd)
154
154
fi
155
155
# end of workaround
156
156
done
157
- printf ' %s' " $( cd " $basedir " ; pwd) "
157
+ printf ' %s' " $( cd " $basedir " || exit 1 ; pwd) "
158
158
}
159
159
160
160
# concatenates all lines of a file
161
161
concat_lines () {
162
162
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 "
164
169
fi
165
170
}
166
171
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 " ) " )
168
179
if [ -z " $BASE_DIR " ]; then
169
180
exit 1;
170
181
fi
171
182
172
183
MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:- " $BASE_DIR " } ; export MAVEN_PROJECTBASEDIR
173
- if [ " $MVNW_VERBOSE " = true ]; then
174
- echo $MAVEN_PROJECTBASEDIR
175
- fi
184
+ log " $MAVEN_PROJECTBASEDIR "
176
185
177
186
# #########################################################################################
178
187
# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
179
188
# This allows using the maven wrapper in projects that prohibit checking in binary data.
180
189
# #########################################################################################
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 "
185
193
else
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
+
189
196
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"
191
198
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"
193
200
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 ;;
196
205
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
+
202
209
if $cygwin ; then
203
- wrapperJarPath=` cygpath --path --windows " $wrapperJarPath " `
210
+ wrapperJarPath=$( cygpath --path --windows " $wrapperJarPath " )
204
211
fi
205
212
206
213
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"
212
216
if [ -z " $MVNW_USERNAME " ] || [ -z " $MVNW_PASSWORD " ]; then
213
- wget $QUIET " $wrapperUrl " -O " $wrapperJarPath "
217
+ wget $QUIET " $wrapperUrl " -O " $wrapperJarPath " || rm -f " $wrapperJarPath "
214
218
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 "
216
220
fi
217
- [ $? -eq 0 ] || rm -f " $wrapperJarPath "
218
221
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"
224
224
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 "
226
226
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 "
228
228
fi
229
- [ $? -eq 0 ] || rm -f " $wrapperJarPath "
230
229
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"
236
233
# For Cygwin, switch paths to Windows format before running javac
237
234
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 " )
240
237
fi
241
238
if [ -e " $javaSource " ]; then
242
239
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 ..."
247
241
(" $JAVA_HOME /bin/javac" " $javaSource " )
248
242
fi
249
243
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 "
255
246
fi
256
247
fi
257
248
fi
260
251
# End of extension
261
252
# #########################################################################################
262
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
+
263
283
MAVEN_OPTS=" $( concat_lines " $MAVEN_PROJECTBASEDIR /.mvn/jvm.config" ) $MAVEN_OPTS "
264
284
265
285
# For Cygwin, switch paths to Windows format before running java
266
286
if $cygwin ; then
267
287
[ -n " $JAVA_HOME " ] &&
268
- JAVA_HOME=` cygpath --path --windows " $JAVA_HOME " `
288
+ JAVA_HOME=$( cygpath --path --windows " $JAVA_HOME " )
269
289
[ -n " $CLASSPATH " ] &&
270
- CLASSPATH=` cygpath --path --windows " $CLASSPATH " `
290
+ CLASSPATH=$( cygpath --path --windows " $CLASSPATH " )
271
291
[ -n " $MAVEN_PROJECTBASEDIR " ] &&
272
- MAVEN_PROJECTBASEDIR=` cygpath --path --windows " $MAVEN_PROJECTBASEDIR " `
292
+ MAVEN_PROJECTBASEDIR=$( cygpath --path --windows " $MAVEN_PROJECTBASEDIR " )
273
293
fi
274
294
275
295
# Provide a "standardized" way to retrieve the CLI args that will
276
296
# work with both Windows and non-Windows executions.
277
- MAVEN_CMD_LINE_ARGS=" $MAVEN_CONFIG $@ "
297
+ MAVEN_CMD_LINE_ARGS=" $MAVEN_CONFIG $* "
278
298
export MAVEN_CMD_LINE_ARGS
279
299
280
300
WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
281
301
302
+ # shellcheck disable=SC2086 # safe args
282
303
exec " $JAVACMD " \
283
304
$MAVEN_OPTS \
284
305
$MAVEN_DEBUG_OPTS \
0 commit comments