#!/usr/bin/env bash # Regenerates every file in ../output/. Requires JDK25_HOME. set -euo pipefail [[ -z "${JDK25_HOME:-}" ]] && { echo "JDK25_HOME must be set" >&2; exit 1; } cd "$(dirname "$0")/.." OUT=output; mkdir -p "$OUT" export JAVA_HOME="$JDK25_HOME" mvn -q -f ../pom.xml -pl serialization -am package 2>&1 | grep -v -E "Picked up|^WARNING" || true J="$JDK25_HOME/bin/java"; JC="$JDK25_HOME/bin/javac" M2="${HOME}/.m2/repository" CP="target/classes:$(ls $M2/tools/jackson/core/jackson-databind/3.2.3/*.jar):$(ls $M2/tools/jackson/core/jackson-core/3.2.3/*.jar):$(ls $M2/com/fasterxml/jackson/core/jackson-annotations/*/*.jar | tail -1):$(ls $M2/com/google/protobuf/protobuf-java/4.36.2/*.jar)" run() { f=$1; shift; echo "==> $f"; "$J" "$@" 2>&1 | grep -v "Picked up" > "$OUT/$f"; } # 01: the UID travels inside the stream run 01-uid-in-stream.txt -cp "$CP" com.ankurm.serialization.UidInStreamDemo # 02/03: two versions of the same class, with and without an explicit serialVersionUID for mode in implicit explicit; do rm -rf target/drift-$mode; mkdir -p target/drift-$mode for v in v1 v2; do d=target/drift-$mode/$v/com/ankurm/serialization/drift; mkdir -p $d if [[ $mode == explicit ]]; then sed 's#/\*UID\*/#private static final long serialVersionUID = 1L;#' src/versions/$v/Account.java > $d/Account.java else sed 's#/\*UID\*/##' src/versions/$v/Account.java > $d/Account.java fi cp src/versions/common/*.java $d/ $JC -d target/drift-$mode/$v/classes $d/*.java 2>&1 | grep -v "Picked up" || true done done { echo '$ # implicit serialVersionUID (none declared)' echo '$ java -cp v1 DriftWrite' "$J" -cp target/drift-implicit/v1/classes com.ankurm.serialization.drift.DriftWrite target/account-implicit.ser 2>&1 | grep -v "Picked up" echo '$ java -cp v2 DriftRead # v2 adds a field' "$J" -cp target/drift-implicit/v2/classes com.ankurm.serialization.drift.DriftRead target/account-implicit.ser 2>&1 | grep -v "Picked up" } > "$OUT/02-drift-implicit.txt" { echo '$ # explicit serialVersionUID = 1L' echo '$ java -cp v1 DriftWrite' "$J" -cp target/drift-explicit/v1/classes com.ankurm.serialization.drift.DriftWrite target/account-explicit.ser 2>&1 | grep -v "Picked up" echo '$ java -cp v2 DriftRead # v2 adds a field' "$J" -cp target/drift-explicit/v2/classes com.ankurm.serialization.drift.DriftRead target/account-explicit.ser 2>&1 | grep -v "Picked up" } > "$OUT/03-drift-explicit.txt" run 04-readobject-runs-code.txt -cp "$CP" com.ankurm.serialization.ReadObjectRunsCodeDemo run 05-resource-limits.txt -Xmx256m -cp "$CP" com.ankurm.serialization.ResourceLimitsDemo run 06-records.txt -cp "$CP" com.ankurm.serialization.RecordsDemo { echo '$ java -Djdk.serialFilter="maxdepth=10;com.ankurm.serialization.*;java.lang.*;!*" FilterFactoryDemo' "$J" -Djdk.serialFilter='maxdepth=10;com.ankurm.serialization.*;java.lang.*;!*' -cp "$CP" com.ankurm.serialization.FilterFactoryDemo 2>&1 | grep -v "Picked up" } > "$OUT/07-filter-factory.txt" run 08-format-sizes.txt -cp "$CP" com.ankurm.serialization.FormatSizeDemo echo "==> JMH" "$J" -jar target/benchmarks.jar SerializationBenchmark -rf text -rff "$OUT/09-jmh-raw.txt" > /dev/null 2>&1 cp target/surefire-reports/com.ankurm.serialization.SerializationTest.txt "$OUT/10-tests.txt" echo Done