#!/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