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.3.2
23
+ #
24
+ # Optional ENV vars
25
+ # -----------------
26
+ # JAVA_HOME - location of a JDK home dir, required when download maven via java source
27
+ # MVNW_REPOURL - repo url base for downloading maven distribution
28
+ # MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven
29
+ # MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output
30
+ # ----------------------------------------------------------------------------
31
+
32
+ set -euf
33
+ [ " ${MVNW_VERBOSE-} " != debug ] || set -x
34
+
35
+ # OS specific support.
36
+ native_path () { printf %s\\ n " $1 " ; }
37
+ case " $( uname) " in
38
+ CYGWIN* | MINGW* )
39
+ [ -z " ${JAVA_HOME-} " ] || JAVA_HOME=" $( cygpath --unix " $JAVA_HOME " ) "
40
+ native_path () { cygpath --path --windows " $1 " ; }
41
+ ;;
42
+ esac
43
+
44
+ # set JAVACMD and JAVACCMD
45
+ set_java_home () {
46
+ # For Cygwin and MinGW, ensure paths are in Unix format before anything is touched
47
+ if [ -n " ${JAVA_HOME-} " ]; then
48
+ if [ -x " $JAVA_HOME /jre/sh/java" ]; then
49
+ # IBM's JDK on AIX uses strange locations for the executables
50
+ JAVACMD=" $JAVA_HOME /jre/sh/java"
51
+ JAVACCMD=" $JAVA_HOME /jre/sh/javac"
52
+ else
53
+ JAVACMD=" $JAVA_HOME /bin/java"
54
+ JAVACCMD=" $JAVA_HOME /bin/javac"
55
+
56
+ if [ ! -x " $JAVACMD " ] || [ ! -x " $JAVACCMD " ]; then
57
+ echo " The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2
58
+ echo " JAVA_HOME is set to \" $JAVA_HOME \" , but \"\$ JAVA_HOME/bin/java\" or \"\$ JAVA_HOME/bin/javac\" does not exist." >&2
59
+ return 1
60
+ fi
61
+ fi
62
+ else
63
+ JAVACMD=" $(
64
+ ' set' +e
65
+ ' unset' -f command 2> /dev/null
66
+ ' command' -v java
67
+ ) " || :
68
+ JAVACCMD=" $(
69
+ ' set' +e
70
+ ' unset' -f command 2> /dev/null
71
+ ' command' -v javac
72
+ ) " || :
73
+
74
+ if [ ! -x " ${JAVACMD-} " ] || [ ! -x " ${JAVACCMD-} " ]; then
75
+ echo " The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2
76
+ return 1
77
+ fi
78
+ fi
79
+ }
80
+
81
+ # hash string like Java String::hashCode
82
+ hash_string () {
83
+ str=" ${1:- } " h=0
84
+ while [ -n " $str " ]; do
85
+ char=" ${str% " ${str# ?} " } "
86
+ h=$(( (h * 31 + $(LC_CTYPE= C printf % d "'$char ")) % 4294967296))
87
+ str=" ${str# ?} "
88
+ done
89
+ printf %x\\ n $h
90
+ }
91
+
92
+ verbose () { : ; }
93
+ [ " ${MVNW_VERBOSE-} " != true ] || verbose () { printf %s\\ n " ${1-} " ; }
94
+
95
+ die () {
96
+ printf %s\\ n " $1 " >&2
97
+ exit 1
98
+ }
99
+
100
+ trim () {
101
+ # MWRAPPER-139:
102
+ # Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds.
103
+ # Needed for removing poorly interpreted newline sequences when running in more
104
+ # exotic environments such as mingw bash on Windows.
105
+ printf " %s" " ${1} " | tr -d ' [:space:]'
106
+ }
107
+
108
+ # parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties
109
+ while IFS=" =" read -r key value; do
110
+ case " ${key-} " in
111
+ distributionUrl) distributionUrl=$( trim " ${value-} " ) ;;
112
+ distributionSha256Sum) distributionSha256Sum=$( trim " ${value-} " ) ;;
113
+ esac
114
+ done < " ${0%/* } /.mvn/wrapper/maven-wrapper.properties"
115
+ [ -n " ${distributionUrl-} " ] || die " cannot read distributionUrl property in ${0%/* } /.mvn/wrapper/maven-wrapper.properties"
116
+
117
+ case " ${distributionUrl##*/ } " in
118
+ maven-mvnd-* bin.* )
119
+ MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/
120
+ case " ${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-} :$( uname -a) " in
121
+ * AMD64:CYGWIN* | * AMD64:MINGW* ) distributionPlatform=windows-amd64 ;;
122
+ :Darwin* x86_64) distributionPlatform=darwin-amd64 ;;
123
+ :Darwin* arm64) distributionPlatform=darwin-aarch64 ;;
124
+ :Linux* x86_64* ) distributionPlatform=linux-amd64 ;;
125
+ * )
126
+ echo " Cannot detect native platform for mvnd on $( uname) -$( uname -m) , use pure java version" >&2
127
+ distributionPlatform=linux-amd64
128
+ ;;
129
+ esac
130
+ distributionUrl=" ${distributionUrl% -bin.* } -$distributionPlatform .zip"
131
+ ;;
132
+ maven-mvnd-* ) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;;
133
+ * ) MVN_CMD=" mvn${0##*/ mvnw} " _MVNW_REPO_PATTERN=/org/apache/maven/ ;;
134
+ esac
135
+
136
+ # apply MVNW_REPOURL and calculate MAVEN_HOME
137
+ # maven home pattern: ~/.m2/wrapper/dists/{apache-maven-<version>,maven-mvnd-<version>-<platform>}/<hash>
138
+ [ -z " ${MVNW_REPOURL-} " ] || distributionUrl=" $MVNW_REPOURL$_MVNW_REPO_PATTERN ${distributionUrl#* " $_MVNW_REPO_PATTERN " } "
139
+ distributionUrlName=" ${distributionUrl##*/ } "
140
+ distributionUrlNameMain=" ${distributionUrlName% .* } "
141
+ distributionUrlNameMain=" ${distributionUrlNameMain% -bin} "
142
+ MAVEN_USER_HOME=" ${MAVEN_USER_HOME:- ${HOME} / .m2} "
143
+ MAVEN_HOME=" ${MAVEN_USER_HOME} /wrapper/dists/${distributionUrlNameMain-} /$( hash_string " $distributionUrl " ) "
144
+
145
+ exec_maven () {
146
+ unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || :
147
+ exec " $MAVEN_HOME /bin/$MVN_CMD " " $@ " || die " cannot exec $MAVEN_HOME /bin/$MVN_CMD "
148
+ }
149
+
150
+ if [ -d " $MAVEN_HOME " ]; then
151
+ verbose " found existing MAVEN_HOME at $MAVEN_HOME "
152
+ exec_maven " $@ "
153
+ fi
154
+
155
+ case " ${distributionUrl-} " in
156
+ *? -bin.zip | *? maven-mvnd-?* -?* .zip) ;;
157
+ * ) die " distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-} '" ;;
158
+ esac
159
+
160
+ # prepare tmp dir
161
+ if TMP_DOWNLOAD_DIR=" $( mktemp -d) " && [ -d " $TMP_DOWNLOAD_DIR " ]; then
162
+ clean () { rm -rf -- " $TMP_DOWNLOAD_DIR " ; }
163
+ trap clean HUP INT TERM EXIT
164
+ else
165
+ die " cannot create temp dir"
166
+ fi
167
+
168
+ mkdir -p -- " ${MAVEN_HOME%/* } "
169
+
170
+ # Download and Install Apache Maven
171
+ verbose " Couldn't find MAVEN_HOME, downloading and installing it ..."
172
+ verbose " Downloading from: $distributionUrl "
173
+ verbose " Downloading to: $TMP_DOWNLOAD_DIR /$distributionUrlName "
174
+
175
+ # select .zip or .tar.gz
176
+ if ! command -v unzip > /dev/null; then
177
+ distributionUrl=" ${distributionUrl% .zip} .tar.gz"
178
+ distributionUrlName=" ${distributionUrl##*/ } "
179
+ fi
180
+
181
+ # verbose opt
182
+ __MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR=' '
183
+ [ " ${MVNW_VERBOSE-} " != true ] || __MVNW_QUIET_WGET=' ' __MVNW_QUIET_CURL=' ' __MVNW_QUIET_UNZIP=' ' __MVNW_QUIET_TAR=v
184
+
185
+ # normalize http auth
186
+ case " ${MVNW_PASSWORD: +has-password} " in
187
+ ' ' ) MVNW_USERNAME=' ' MVNW_PASSWORD=' ' ;;
188
+ has-password) [ -n " ${MVNW_USERNAME-} " ] || MVNW_USERNAME=' ' MVNW_PASSWORD=' ' ;;
189
+ esac
190
+
191
+ if [ -z " ${MVNW_USERNAME-} " ] && command -v wget > /dev/null; then
192
+ verbose " Found wget ... using wget"
193
+ wget ${__MVNW_QUIET_WGET: +" $__MVNW_QUIET_WGET " } " $distributionUrl " -O " $TMP_DOWNLOAD_DIR /$distributionUrlName " || die " wget: Failed to fetch $distributionUrl "
194
+ elif [ -z " ${MVNW_USERNAME-} " ] && command -v curl > /dev/null; then
195
+ verbose " Found curl ... using curl"
196
+ curl ${__MVNW_QUIET_CURL: +" $__MVNW_QUIET_CURL " } -f -L -o " $TMP_DOWNLOAD_DIR /$distributionUrlName " " $distributionUrl " || die " curl: Failed to fetch $distributionUrl "
197
+ elif set_java_home; then
198
+ verbose " Falling back to use Java to download"
199
+ javaSource=" $TMP_DOWNLOAD_DIR /Downloader.java"
200
+ targetZip=" $TMP_DOWNLOAD_DIR /$distributionUrlName "
201
+ cat > " $javaSource " << -END
202
+ public class Downloader extends java.net.Authenticator
203
+ {
204
+ protected java.net.PasswordAuthentication getPasswordAuthentication()
205
+ {
206
+ return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() );
207
+ }
208
+ public static void main( String[] args ) throws Exception
209
+ {
210
+ setDefault( new Downloader() );
211
+ java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() );
212
+ }
213
+ }
214
+ END
215
+ # For Cygwin/MinGW, switch paths to Windows format before running javac and java
216
+ verbose " - Compiling Downloader.java ..."
217
+ " $( native_path " $JAVACCMD " ) " " $( native_path " $javaSource " ) " || die " Failed to compile Downloader.java"
218
+ verbose " - Running Downloader.java ..."
219
+ " $( native_path " $JAVACMD " ) " -cp " $( native_path " $TMP_DOWNLOAD_DIR " ) " Downloader " $distributionUrl " " $( native_path " $targetZip " ) "
220
+ fi
221
+
222
+ # If specified, validate the SHA-256 sum of the Maven distribution zip file
223
+ if [ -n " ${distributionSha256Sum-} " ]; then
224
+ distributionSha256Result=false
225
+ if [ " $MVN_CMD " = mvnd.sh ]; then
226
+ echo " Checksum validation is not supported for maven-mvnd." >&2
227
+ echo " Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2
228
+ exit 1
229
+ elif command -v sha256sum > /dev/null; then
230
+ if echo " $distributionSha256Sum $TMP_DOWNLOAD_DIR /$distributionUrlName " | sha256sum -c > /dev/null 2>&1 ; then
231
+ distributionSha256Result=true
232
+ fi
233
+ elif command -v shasum > /dev/null; then
234
+ if echo " $distributionSha256Sum $TMP_DOWNLOAD_DIR /$distributionUrlName " | shasum -a 256 -c > /dev/null 2>&1 ; then
235
+ distributionSha256Result=true
236
+ fi
237
+ else
238
+ echo " Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2
239
+ echo " Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2
240
+ exit 1
241
+ fi
242
+ if [ $distributionSha256Result = false ]; then
243
+ echo " Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2
244
+ echo " If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2
245
+ exit 1
246
+ fi
247
+ fi
248
+
249
+ # unzip and move
250
+ if command -v unzip > /dev/null; then
251
+ unzip ${__MVNW_QUIET_UNZIP: +" $__MVNW_QUIET_UNZIP " } " $TMP_DOWNLOAD_DIR /$distributionUrlName " -d " $TMP_DOWNLOAD_DIR " || die " failed to unzip"
252
+ else
253
+ tar xzf${__MVNW_QUIET_TAR: +" $__MVNW_QUIET_TAR " } " $TMP_DOWNLOAD_DIR /$distributionUrlName " -C " $TMP_DOWNLOAD_DIR " || die " failed to untar"
254
+ fi
255
+ printf %s\\ n " $distributionUrl " > " $TMP_DOWNLOAD_DIR /$distributionUrlNameMain /mvnw.url"
256
+ mv -- " $TMP_DOWNLOAD_DIR /$distributionUrlNameMain " " $MAVEN_HOME " || [ -d " $MAVEN_HOME " ] || die " fail to move MAVEN_HOME"
257
+
258
+ clean || :
259
+ exec_maven " $@ "
0 commit comments