Files
gitea-docker/desktop/build-jres.sh
Bryce 47386ce4e6 Add build-jres.sh script for minimal JRE creation and update packr configs
- 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
2026-03-22 09:26:43 -07:00

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 "$@"