- Creates minimal JREs (~50MB vs ~300MB) using jlink - Downloads Corretto JDKs for specified Java version - Supports linux-x64, windows-x64, macos-x64, macos-arm64 - Note: Windows ARM64 not available from Corretto - Updates all packr configs to use minimal JREs - Adds macOS ARM64 build configs
242 lines
7.1 KiB
Bash
Executable File
242 lines
7.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -e
|
|
|
|
JAVA_VERSION="${1:-11}"
|
|
JVM_DIR="$(cd "$(dirname "$0")/jvms" && pwd)"
|
|
MODULES="java.base,java.desktop,java.logging,java.sql,java.xml,java.naming,java.management,jdk.unsupported"
|
|
|
|
CORRETTO_BASE_URL="https://corretto.aws/downloads/latest"
|
|
|
|
build_linux_x64() {
|
|
local platform="linux-x64"
|
|
local url="${CORRETTO_BASE_URL}/amazon-corretto-${JAVA_VERSION}-x64-linux-jdk.tar.gz"
|
|
local archive="${JVM_DIR}/corretto${JAVA_VERSION}-${platform}.tar.gz"
|
|
local extract_dir="${JVM_DIR}/tmp-${platform}"
|
|
local jre_dir="${JVM_DIR}/jre-${platform}"
|
|
|
|
echo "=== Building $platform ==="
|
|
|
|
echo "Downloading..."
|
|
curl -L -o "$archive" "$url"
|
|
|
|
echo "Extracting..."
|
|
rm -rf "$extract_dir" "$jre_dir"
|
|
mkdir -p "$extract_dir"
|
|
tar -xzf "$archive" -C "$extract_dir" --strip-components=1
|
|
|
|
echo "Creating minimal JRE..."
|
|
"$extract_dir/bin/jlink" \
|
|
--no-header-files \
|
|
--no-man-pages \
|
|
--compress=2 \
|
|
--add-modules "$MODULES" \
|
|
--output "$jre_dir"
|
|
|
|
rm -rf "$extract_dir"
|
|
|
|
echo "Done: $(du -sh "$jre_dir" | cut -f1)"
|
|
echo ""
|
|
}
|
|
|
|
build_windows_x64() {
|
|
local platform="windows-x64"
|
|
local url="${CORRETTO_BASE_URL}/amazon-corretto-${JAVA_VERSION}-x64-windows-jdk.zip"
|
|
local archive="${JVM_DIR}/corretto${JAVA_VERSION}-${platform}.zip"
|
|
local extract_dir="${JVM_DIR}/tmp-${platform}"
|
|
local jre_dir="${JVM_DIR}/jre-${platform}"
|
|
local host_jdk="${JVM_DIR}/tmp-linux-x64"
|
|
|
|
echo "=== Building $platform ==="
|
|
|
|
if [ ! -d "$host_jdk" ]; then
|
|
echo "Downloading host JDK for jlink..."
|
|
local host_archive="${JVM_DIR}/corretto${JAVA_VERSION}-linux-x64.tar.gz"
|
|
curl -L -o "$host_archive" "${CORRETTO_BASE_URL}/amazon-corretto-${JAVA_VERSION}-x64-linux-jdk.tar.gz"
|
|
mkdir -p "$host_jdk"
|
|
tar -xzf "$host_archive" -C "$host_jdk" --strip-components=1
|
|
fi
|
|
|
|
echo "Downloading..."
|
|
curl -L -o "$archive" "$url"
|
|
|
|
echo "Extracting..."
|
|
rm -rf "$extract_dir" "$jre_dir"
|
|
mkdir -p "$extract_dir"
|
|
unzip -q "$archive" -d "$extract_dir"
|
|
|
|
local jdk_dir=$(find "$extract_dir" -maxdepth 1 -type d -name "jdk*" | head -1)
|
|
local jmods_path="$jdk_dir/jmods"
|
|
|
|
echo "Creating minimal JRE..."
|
|
"$host_jdk/bin/jlink" \
|
|
--no-header-files \
|
|
--no-man-pages \
|
|
--compress=2 \
|
|
--add-modules "$MODULES" \
|
|
--module-path "$jmods_path" \
|
|
--output "$jre_dir"
|
|
|
|
rm -rf "$extract_dir"
|
|
|
|
echo "Done: $(du -sh "$jre_dir" | cut -f1)"
|
|
echo ""
|
|
}
|
|
|
|
build_windows_arm64() {
|
|
echo "=== Building windows-arm64 ==="
|
|
echo "ERROR: Windows ARM64 JDK is not available from Amazon Corretto"
|
|
echo "Skipping..."
|
|
echo ""
|
|
}
|
|
|
|
build_macos_x64() {
|
|
local platform="macos-x64"
|
|
local url="${CORRETTO_BASE_URL}/amazon-corretto-${JAVA_VERSION}-x64-macos-jdk.tar.gz"
|
|
local archive="${JVM_DIR}/corretto${JAVA_VERSION}-${platform}.tar.gz"
|
|
local extract_dir="${JVM_DIR}/tmp-${platform}"
|
|
local jre_dir="${JVM_DIR}/jre-${platform}"
|
|
local host_jdk="${JVM_DIR}/tmp-linux-x64"
|
|
|
|
echo "=== Building $platform ==="
|
|
|
|
if [ ! -d "$host_jdk" ]; then
|
|
echo "Downloading host JDK for jlink..."
|
|
local host_archive="${JVM_DIR}/corretto${JAVA_VERSION}-linux-x64.tar.gz"
|
|
curl -L -o "$host_archive" "${CORRETTO_BASE_URL}/amazon-corretto-${JAVA_VERSION}-x64-linux-jdk.tar.gz"
|
|
mkdir -p "$host_jdk"
|
|
tar -xzf "$host_archive" -C "$host_jdk" --strip-components=1
|
|
fi
|
|
|
|
echo "Downloading..."
|
|
curl -L -o "$archive" "$url"
|
|
|
|
echo "Extracting..."
|
|
rm -rf "$extract_dir" "$jre_dir"
|
|
mkdir -p "$extract_dir"
|
|
tar -xzf "$archive" -C "$extract_dir"
|
|
|
|
local jdk_dir=$(find "$extract_dir" -maxdepth 1 -type d -name "jdk*" -o -name "amazon-corretto*" | head -1)
|
|
local jmods_path="$jdk_dir/Contents/Home/jmods"
|
|
|
|
if [ ! -d "$jmods_path" ]; then
|
|
jmods_path="$jdk_dir/jmods"
|
|
fi
|
|
|
|
echo "Creating minimal JRE..."
|
|
"$host_jdk/bin/jlink" \
|
|
--no-header-files \
|
|
--no-man-pages \
|
|
--compress=2 \
|
|
--add-modules "$MODULES" \
|
|
--module-path "$jmods_path" \
|
|
--output "$jre_dir"
|
|
|
|
rm -rf "$extract_dir"
|
|
|
|
echo "Done: $(du -sh "$jre_dir" | cut -f1)"
|
|
echo ""
|
|
}
|
|
|
|
build_macos_arm64() {
|
|
local platform="macos-arm64"
|
|
local url="${CORRETTO_BASE_URL}/amazon-corretto-${JAVA_VERSION}-aarch64-macos-jdk.tar.gz"
|
|
local archive="${JVM_DIR}/corretto${JAVA_VERSION}-${platform}.tar.gz"
|
|
local extract_dir="${JVM_DIR}/tmp-${platform}"
|
|
local jre_dir="${JVM_DIR}/jre-${platform}"
|
|
local host_jdk="${JVM_DIR}/tmp-linux-x64"
|
|
|
|
echo "=== Building $platform ==="
|
|
|
|
if [ ! -d "$host_jdk" ]; then
|
|
echo "Downloading host JDK for jlink..."
|
|
local host_archive="${JVM_DIR}/corretto${JAVA_VERSION}-linux-x64.tar.gz"
|
|
curl -L -o "$host_archive" "${CORRETTO_BASE_URL}/amazon-corretto-${JAVA_VERSION}-x64-linux-jdk.tar.gz"
|
|
mkdir -p "$host_jdk"
|
|
tar -xzf "$host_archive" -C "$host_jdk" --strip-components=1
|
|
fi
|
|
|
|
echo "Downloading..."
|
|
curl -L -o "$archive" "$url"
|
|
|
|
echo "Extracting..."
|
|
rm -rf "$extract_dir" "$jre_dir"
|
|
mkdir -p "$extract_dir"
|
|
tar -xzf "$archive" -C "$extract_dir"
|
|
|
|
local jdk_dir=$(find "$extract_dir" -maxdepth 1 -type d -name "jdk*" -o -name "amazon-corretto*" | head -1)
|
|
local jmods_path="$jdk_dir/Contents/Home/jmods"
|
|
|
|
if [ ! -d "$jmods_path" ]; then
|
|
jmods_path="$jdk_dir/jmods"
|
|
fi
|
|
|
|
echo "Creating minimal JRE..."
|
|
"$host_jdk/bin/jlink" \
|
|
--no-header-files \
|
|
--no-man-pages \
|
|
--compress=2 \
|
|
--add-modules "$MODULES" \
|
|
--module-path "$jmods_path" \
|
|
--output "$jre_dir"
|
|
|
|
rm -rf "$extract_dir"
|
|
|
|
echo "Done: $(du -sh "$jre_dir" | cut -f1)"
|
|
echo ""
|
|
}
|
|
|
|
main() {
|
|
mkdir -p "$JVM_DIR"
|
|
|
|
local target="${2:-all}"
|
|
|
|
echo "Building JREs for Java $JAVA_VERSION"
|
|
echo "Modules: $MODULES"
|
|
echo "Target: $target"
|
|
echo ""
|
|
|
|
case "$target" in
|
|
linux-x64)
|
|
build_linux_x64
|
|
;;
|
|
windows-x64)
|
|
build_windows_x64
|
|
;;
|
|
windows-arm64)
|
|
build_windows_arm64
|
|
;;
|
|
macos-x64)
|
|
build_macos_x64
|
|
;;
|
|
macos-arm64)
|
|
build_macos_arm64
|
|
;;
|
|
all)
|
|
build_linux_x64
|
|
build_windows_x64
|
|
build_macos_x64
|
|
build_macos_arm64
|
|
;;
|
|
*)
|
|
echo "Unknown target: $target"
|
|
echo "Valid targets: linux-x64, windows-x64, macos-x64, macos-arm64, all"
|
|
echo "Note: windows-arm64 is not available from Corretto"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
echo "=== Summary ==="
|
|
for platform in linux-x64 windows-x64 macos-x64 macos-arm64; do
|
|
local jre_dir="${JVM_DIR}/jre-${platform}"
|
|
if [ -d "$jre_dir" ]; then
|
|
local size=$(du -sh "$jre_dir" | cut -f1)
|
|
echo "$platform: $size"
|
|
fi
|
|
done
|
|
|
|
rm -rf "${JVM_DIR}/tmp-linux-x64"
|
|
}
|
|
|
|
main "$@"
|