#!/usr/bin/env bash # Java 8 features: every demo compiled and run on a real JDK 8; regenerates output/*.txt # JDK8=/path/to/jdk8 JDK21=/path/to/jdk21 ./run.sh set -uo pipefail unset JAVA_TOOL_OPTIONS HERE="$(cd "$(dirname "$0")" && pwd)" JDK8="${JDK8:-/opt/jdks/jdk8}"; JDK21="${JDK21:-}" 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" -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"))"; "$jdk/bin/javac" -d "$o" "$src" 2>&1; } cr "$JDK8" src/LambdaDemo.java LambdaDemo > "$OUT/01-lambda.txt" { cr "$JDK8" src/StreamsDemo.java StreamsDemo; } > "$OUT/02-streams.txt" cr "$JDK8" src/OptionalDemo.java OptionalDemo > "$OUT/03-optional.txt" cr "$JDK8" src/DefaultMethodsDemo.java DefaultMethodsDemo > "$OUT/04-default-methods.txt" cr "$JDK8" src/TimeDemo.java TimeDemo > "$OUT/05-java-time.txt" cr "$JDK8" src/FunctionalInterfacesDemo.java FunctionalInterfacesDemo > "$OUT/06-functional-interfaces.txt" { co "$JDK8" broken/CaptureError.java; echo; co "$JDK8" broken/DiamondError.java; } > "$OUT/07-compile-errors.txt" exit 0