Skip to content

Commit 1b3700a

Browse files
committed
use maven wrapper from internal mirror
1 parent 3fd37d7 commit 1b3700a

File tree

6 files changed

+308
-15
lines changed

6 files changed

+308
-15
lines changed

graalpython/com.oracle.graal.python.test/src/tests/standalone/mvnw/.mvn/wrapper/maven-wrapper.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,5 @@
1414
# KIND, either express or implied. See the License for the
1515
# specific language governing permissions and limitations
1616
# under the License.
17-
wrapperVersion=3.3.1
18-
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.6/apache-maven-3.9.6-bin.zip
17+
wrapperVersion=3.3.2
18+
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.8/apache-maven-3.9.8-bin.zip
Lines changed: 259 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,259 @@
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 "$@"

graalpython/com.oracle.graal.python.test/src/tests/standalone/mvnw/mvnw.cmd

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
@REM ----------------------------------------------------------------------------
2020

2121
@REM ----------------------------------------------------------------------------
22-
@REM Apache Maven Wrapper startup batch script, version 3.3.1
22+
@REM Apache Maven Wrapper startup batch script, version 3.3.2
2323
@REM
2424
@REM Optional ENV vars
2525
@REM MVNW_REPOURL - repo url base for downloading maven distribution
@@ -79,6 +79,9 @@ if ($env:MVNW_REPOURL) {
7979
$distributionUrlName = $distributionUrl -replace '^.*/',''
8080
$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$',''
8181
$MAVEN_HOME_PARENT = "$HOME/.m2/wrapper/dists/$distributionUrlNameMain"
82+
if ($env:MAVEN_USER_HOME) {
83+
$MAVEN_HOME_PARENT = "$env:MAVEN_USER_HOME/wrapper/dists/$distributionUrlNameMain"
84+
}
8285
$MAVEN_HOME_NAME = ([System.Security.Cryptography.MD5]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join ''
8386
$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME"
8487

graalpython/com.oracle.graal.python.test/src/tests/standalone/test_standalone.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,26 @@ def generate_app(self, tmpdir, target_dir, target_name, pom_template=None):
175175

176176
util.patch_pom_repositories(os.path.join(target_dir, "pom.xml"))
177177

178+
distribution_url_override = self.env.get("MAVEN_DISTRIBUTION_URL_OVERRIDE")
179+
if distribution_url_override:
180+
mvnw_dir = os.path.join(os.path.dirname(__file__), "mvnw")
181+
182+
shutil.copy(os.path.join(mvnw_dir, "mvnw"), os.path.join(target_dir, "mvnw"))
183+
shutil.copy(os.path.join(mvnw_dir, "mvnw.cmd"), os.path.join(target_dir, "mvnw.cmd"))
184+
shutil.copytree(os.path.join(mvnw_dir, ".mvn"), os.path.join(target_dir, ".mvn"))
185+
186+
mvnw_properties = os.path.join(target_dir, ".mvn", "wrapper", "maven-wrapper.properties")
187+
new_lines = []
188+
with(open(mvnw_properties)) as f:
189+
while line := f.readline():
190+
line.strip()
191+
if not line.startswith("#") and "distributionUrl" in line:
192+
new_lines.append(f"distributionUrl={distribution_url_override}\n")
193+
else:
194+
new_lines.append(line)
195+
with(open(mvnw_properties, "w")) as f:
196+
f.writelines(new_lines)
197+
178198
@unittest.skipUnless(is_enabled, "ENABLE_STANDALONE_UNITTESTS is not true")
179199
def test_generated_app(self):
180200
with tempfile.TemporaryDirectory() as tmpdir:

graalpython/com.oracle.graal.python.test/src/tests/standalone/util.py

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
import subprocess
4343
import sys
4444

45-
MAVEN_VERSION = "3.9.6"
45+
MAVEN_VERSION = "3.9.8"
4646

4747
def run_cmd(cmd, env, cwd=None, print_out=False):
4848
out = []
@@ -74,17 +74,8 @@ def print_output(out, err_msg):
7474
print("", err_msg, "", sep="\n")
7575

7676
def get_mvn_wrapper(project_dir, env):
77-
if 'win32' != sys.platform:
78-
cmd = [shutil.which('mvn'), "--batch-mode", "wrapper:wrapper", f"-Dmaven={MAVEN_VERSION}"]
79-
out, return_code = run_cmd(cmd, env, cwd=project_dir)
80-
check_ouput("BUILD SUCCESS", out)
81-
mvn_cmd = [os.path.abspath(os.path.join(project_dir, "mvnw")), "--batch-mode"]
82-
else:
83-
# TODO installing mvn wrapper with the current mvn 3.3.9 on gates does not work
84-
# we have to provide the mvnw.cmd script
85-
mvnw_dir = os.path.join(os.path.dirname(__file__), "mvnw")
86-
mvn_cmd = [os.path.abspath(os.path.join(mvnw_dir, "mvnw.cmd")), "--batch-mode"]
87-
77+
cmd = "mvnw" if 'win32' != sys.platform else "mvnw.cmd"
78+
mvn_cmd = [os.path.join(project_dir, cmd), "--batch-mode"]
8879
cmd = mvn_cmd + ["--version"]
8980
out, return_code = run_cmd(cmd, env, cwd=project_dir)
9081
check_ouput(MAVEN_VERSION, out)

mx.graalpython/mx_graalpython.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1372,6 +1372,21 @@ def get_cpython():
13721372
else:
13731373
return "python3"
13741374

1375+
def get_wrapper_urls(wrapper_properties_file, keys):
1376+
ret = dict()
1377+
with(open(wrapper_properties_file)) as f:
1378+
while line := f.readline():
1379+
line = line.strip()
1380+
for key in keys:
1381+
if not line.startswith("#") and key not in ret.keys() and key in line:
1382+
s = line.split("=")
1383+
if len(s) > 1:
1384+
ret.update({key : mx_urlrewrites.rewriteurl(s[1].strip())})
1385+
break
1386+
for key in keys:
1387+
assert key in ret.keys(), f"Expected key '{key}' to be in {wrapper_properties_file}, but was not."
1388+
1389+
return ret
13751390

13761391
def graalpython_gate_runner(args, tasks):
13771392
report = lambda: (not is_collecting_coverage()) and task
@@ -1530,6 +1545,11 @@ def graalpython_gate_runner(args, tasks):
15301545
f"{pathlib.Path(mvn_repo_path).as_uri()}/",
15311546
mx_urlrewrites.rewriteurl('https://repo1.maven.org/maven2/'),
15321547
])
1548+
1549+
urls = get_wrapper_urls("graalpython/com.oracle.graal.python.test/src/tests/standalone/mvnw/.mvn/wrapper/maven-wrapper.properties", ["distributionUrl"])
1550+
if "distributionUrl" in urls:
1551+
env["MAVEN_DISTRIBUTION_URL_OVERRIDE"] = mx_urlrewrites.rewriteurl(urls["distributionUrl"])
1552+
15331553
env["org.graalvm.maven.downloader.version"] = version
15341554
env["org.graalvm.maven.downloader.repository"] = f"{pathlib.Path(mvn_repo_path).as_uri()}/"
15351555

0 commit comments

Comments
 (0)