aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar László Csomor <laszlocsomor@google.com>2017-05-29 18:47:26 +0200
committerGravatar László Csomor <laszlocsomor@google.com>2017-05-30 09:57:16 +0200
commit102ce6ddc04063d26165c6a2167059f2348026bf (patch)
tree27215412134d74e484d51c7da5f5fac64ff53c17 /src
parent83a7a9ad7e8030d48910e66b959160fcc9819ede (diff)
java_stub_template: create classpath jar if needed
Create a jar with a classpath in it if the classpath is too long. We have already been using this trick on Windows but need it on Linux/Darwin too, because OpenJDK and ZuluJDK don't support parameter file syntax. Fixes https://github.com/bazelbuild/bazel/issues/3069 Change-Id: I57c981ba798dd687118feb98ccf7f61b38b03ff4 PiperOrigin-RevId: 157403379
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/java/java_stub_template.txt23
1 files changed, 16 insertions, 7 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/java_stub_template.txt b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/java_stub_template.txt
index 61a3327495..60e1f712d1 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/java_stub_template.txt
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/java_stub_template.txt
@@ -264,9 +264,8 @@ ARGS=(
%java_start_class%
"${ARGS[@]}")
-if is_windows && (("${#CLASSPATH}" > 7000)); then
- # Windows per-arg limit MAX_ARG_STRLEN == 8k
+function create_and_run_classpath_jar() {
# Build class path as one single string separated by spaces
MANIFEST_CLASSPATH=""
IFS=';'
@@ -295,17 +294,27 @@ if is_windows && (("${#CLASSPATH}" > 7000)); then
echo "Created-By: Bazel" >>$MANIFEST_FILE
# Create classpath JAR file
- MANIFEST_JAR_FILE="${self}-classpath.jar"
- JARBIN=${JARBIN:-$(rlocation local_jdk/bin/jar.exe)}
- $JARBIN cvfm $MANIFEST_JAR_FILE $MANIFEST_FILE >/dev/null
+ MANIFEST_JAR_FILE="$1"
+ JARBIN=$2
+ $JARBIN cvfm "$MANIFEST_JAR_FILE" "$MANIFEST_FILE" >/dev/null \
+ || { echo >$2 "ERROR: $0 failed because $JARBIN failed" ; exit 1 ; }
# Execute JAVA command
MANIFEST_JAR_FILE=$(cygpath --windows "$MANIFEST_JAR_FILE")
$JAVABIN -classpath "$MANIFEST_JAR_FILE" "${ARGS[@]}"
+}
+
+
+if is_windows && (("${#CLASSPATH}" > 7000)); then
+ # Windows per-arg limit MAX_ARG_STRLEN == 8k
+ create_and_run_classpath_jar \
+ "$(cygpath --windows "${self}-classpath.jar")" \
+ "${JARBIN:-$(rlocation local_jdk/bin/jar.exe)}"
elif (("${#CLASSPATH}" > 120000)); then
# Linux per-arg limit MAX_ARG_STRLEN == 128k
- set +o posix # Enable process substitution.
- exec $JAVABIN -classpath @<(echo $CLASSPATH) "${ARGS[@]}"
+ create_and_run_classpath_jar \
+ "${self}-classpath.jar" \
+ "${JARBIN:-$(rlocation local_jdk/bin/jar)}"
else
exec $JAVABIN -classpath $CLASSPATH "${ARGS[@]}"
fi