Files

25 lines
1.8 KiB
Bash
Executable File

#!/usr/bin/env bash
# Java 11 features: every demo compiled and run on real JDKs; regenerates output/*.txt
# JDK8=/path JDK11=/path ./run.sh
set -uo pipefail
unset JAVA_TOOL_OPTIONS
HERE="$(cd "$(dirname "$0")" && pwd)"
JDK8="${JDK8:-/opt/jdks/jdk8}"; JDK11="${JDK11:-/opt/jdks/jdk11}"
OUT="$HERE/output"; mkdir -p "$OUT"; B="$(mktemp -d)"; trap 'rm -rf "$B"' EXIT
cd "$HERE"
ver() { "$1/bin/java" -version 2>&1 | sed -n 1p | sed 's/.*"\(.*\)".*/\1/'; }
cr() { local jdk="$1" src="$2" cls="$3" o; o="$(mktemp -d -p "$B")"
echo "\$ javac $src && java $cls ($(ver "$jdk"))"
"$jdk/bin/javac" -encoding UTF-8 -d "$o" "$src" 2>&1 | grep -v '^Note:'; "$jdk/bin/java" -cp "$o" "$cls" 2>&1; }
co() { local jdk="$1" src="$2" o; o="$(mktemp -d -p "$B")"
echo "\$ javac $src ($(ver "$jdk"))"; local r; r="$("$jdk/bin/javac" -encoding UTF-8 -d "$o" "$src" 2>&1)"; if [ -n "$r" ]; then echo "$r"; else echo "(compiled cleanly)"; fi; }
cr "$JDK11" src/StringMethods.java StringMethods > "$OUT/01-string-methods.txt"
cr "$JDK11" src/FilesDemo.java FilesDemo > "$OUT/02-files.txt"
cr "$JDK11" src/HttpClientDemo.java HttpClientDemo > "$OUT/03-http-client.txt"
cr "$JDK11" src/VarLambda.java VarLambda > "$OUT/04-var-lambda.txt"
{ echo "\$ java src/SingleFile.java ($(ver "$JDK11"))"; "$JDK11/bin/java" src/SingleFile.java 2>&1; } > "$OUT/05-single-file.txt"
cr "$JDK11" src/NestMates.java NestMates > "$OUT/06-nest-mates.txt"
{ co "$JDK8" broken/JaxbRemoved.java; echo; co "$JDK11" broken/JaxbRemoved.java; echo; co "$JDK11" broken/VarWithoutLambda.java; } > "$OUT/07-compile-errors.txt"
{ echo "# the Java 8 compile of src/StringMethods.java: these String methods do not exist on 8"; co "$JDK8" src/StringMethods.java; } > "$OUT/08-string-methods-on-8.txt"
exit 0