mirror of
https://github.com/halcyon/asdf-java.git
synced 2024-10-06 07:42:09 +08:00
205 lines
4.7 KiB
Bash
Executable File
205 lines
4.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# this is global for error reporting
|
|
ASDF_JAVA_ERROR=""
|
|
|
|
# Download the java source from Oracle, copy files and cleanup.
|
|
install_java() {
|
|
local versionstr=$1
|
|
local destdir=$2
|
|
|
|
IFS=- read distro version <<< $versionstr
|
|
|
|
local variant=$(get_variant)
|
|
[[ -z "$ASDF_JAVA_ERROR" ]] || return
|
|
|
|
get_java $distro $version $variant $destdir
|
|
[[ -z "$ASDF_JAVA_ERROR" ]] || return
|
|
|
|
unpack_java $variant $destdir
|
|
[[ -z "$ASDF_JAVA_ERROR" ]] || return
|
|
}
|
|
|
|
# Get the "variant" piece of the Oracle url.
|
|
get_variant() {
|
|
case "$(uname -s)" in
|
|
Linux)
|
|
case "$(uname -m)" in
|
|
x86_64) echo linux-x64.tar.gz ;;
|
|
i[[3-9]]86) echo linux-i586.tar.gz ;;
|
|
*) ASDF_JAVA_ERROR="$(uname -m) is not supported on linux" ;;
|
|
esac ;;
|
|
Darwin)
|
|
case "$(uname -m)" in
|
|
x86_64) echo macosx-x64.dmg ;;
|
|
*) ASDF_JAVA_ERROR="$(uname -m) is not supported on macos" ;;
|
|
esac ;;
|
|
*) ASDF_JAVA_ERROR="$(uname -s) is not supported" ;;
|
|
esac
|
|
}
|
|
|
|
get_current_variant() {
|
|
variant=$1
|
|
|
|
if [[ "$variant" == *"mac"* ]]; then
|
|
variant=$(echo $variant | sed -e 's/mac//')
|
|
fi
|
|
|
|
if [[ "$variant" == *"tar"* ]]; then
|
|
echo $variant | sed -e 's/.tar/_bin.tar/'
|
|
elif [[ "$variant" == *"dmg"* ]]; then
|
|
echo $variant | sed -e 's/.dmg/_bin.dmg/'
|
|
fi
|
|
}
|
|
|
|
get_base_url() {
|
|
local distro=$1
|
|
case $distro in
|
|
oracle) echo "http://download.oracle.com/otn-pub/java/jdk/" ;;
|
|
openjdk) echo "https://download.java.net/java/GA/jdk10/" ;;
|
|
*) ;;
|
|
esac
|
|
}
|
|
|
|
# Download java from Oracle.
|
|
get_java() {
|
|
local distro=$1
|
|
local version=$2
|
|
local variant=$3
|
|
local destdir=$4
|
|
|
|
local base=$(get_base_url $distro)
|
|
local oracle8_version=$(echo $version | sed -e 's/\./u/g')
|
|
|
|
case $distro-$version in
|
|
oracle-10.0.2) url=$base$version+13/19aef61b38124481863b1413dce1855f/jdk-$version'_'$(get_current_variant $variant) ;;
|
|
oracle-8.181) url=$base$oracle8_version-b13/96a7b8442fe848ef90c96a2fad6ed6d1/jdk-$oracle8_version-$variant ;;
|
|
openjdk-10.0.2) url=$base$version/19aef61b38124481863b1413dce1855f/13/openjdk-$version'_'$(get_current_variant $variant) ;;
|
|
*) ASDF_JAVA_ERROR="$version is not a supported version" ;;
|
|
esac
|
|
[[ -z "$ASDF_JAVA_ERROR" ]] || return
|
|
|
|
echo "---- ASDF JAVA MESSAGE ----"
|
|
echo "downloading: $url"
|
|
|
|
curl -fLC - \
|
|
--progress-bar --silent \
|
|
--retry 3 --retry-delay 3 \
|
|
-b oraclelicense=a \
|
|
-o $destdir/$variant $url
|
|
|
|
[[ $? != 0 ]] && ASDF_JAVA_ERROR="downloading java dist"
|
|
}
|
|
|
|
# Unpacks all kinds of sources.
|
|
unpack_java() {
|
|
local variant=$1
|
|
local destdir=$2
|
|
|
|
echo "---- ASDF JAVA MESSAGE ----"
|
|
echo "expanding java dist"
|
|
|
|
case $variant in
|
|
*.tar.gz) unpack_tar $variant $destdir ;;
|
|
*.dmg) unpack_dmg $variant $destdir ;;
|
|
*) ASDF_JAVA_ERROR="$variant is not supported" ;;
|
|
esac
|
|
}
|
|
|
|
# Unarchive a tar archive into the install directory and cleanup.
|
|
#
|
|
# NOTE: Using $origin as a memo rather than executing in a subshell
|
|
# because errors won't be persisted from a subshell.
|
|
#
|
|
# TODO: Should be sanitized with error reporting.
|
|
unpack_tar() {
|
|
local variant=$1
|
|
local destdir=$2
|
|
|
|
local origin=$(pwd)
|
|
cd $destdir; {
|
|
tar -xzf $variant
|
|
[[ $? == 0 ]] || ASDF_JAVA_ERROR="expanding java dist"
|
|
rm $variant
|
|
|
|
local pkg=$(echo * | grep jdk)
|
|
mv $pkg/* .
|
|
rmdir $pkg
|
|
}; cd $origin
|
|
}
|
|
|
|
# Unarchive a tar archive into the install directory and cleanup.
|
|
#
|
|
# NOTE: Using $origin as a memo rather than executing in a subshell
|
|
# because errors won't be persisted from a subshell.
|
|
#
|
|
# TODO: Should be sanitized with error reporting.
|
|
unpack_dmg() {
|
|
local variant=$1
|
|
local destdir=$2
|
|
|
|
local origin=$(pwd)
|
|
cd $destdir; {
|
|
local pkgdir=$destdir/asdf_tmp_pkgdir
|
|
local imgdir=$destdir/asdf_tmp_imgdir
|
|
|
|
mount_dmg $imgdir $variant
|
|
[[ -z "$ASDF_JAVA_ERROR" ]] || return
|
|
|
|
pkgutil --expand $imgdir/*.pkg $pkgdir
|
|
if [[ $? != 0 ]]; then
|
|
ASDF_JAVA_ERROR="expanding java dist"
|
|
unmount_dmg $imgdir
|
|
return
|
|
fi
|
|
|
|
cd $pkgdir/jdk*.pkg; {
|
|
cat Payload | gzip -d | cpio -i
|
|
if [[ $? != 0 ]] || ! [[ -d Contents ]]; then
|
|
ASDF_JAVA_ERROR="demangling dist payload"
|
|
fi
|
|
mv Contents/Home/* $destdir/
|
|
}; cd $destdir
|
|
|
|
unmount_dmg $imgdir
|
|
rm -r $destdir/$variant
|
|
}; cd $origin
|
|
}
|
|
|
|
mount_dmg() {
|
|
local dir=$1
|
|
local dev=$2
|
|
|
|
hdiutil mount -quiet -mountpoint $dir $dev
|
|
[[ $? == 0 ]] || ASDF_JAVA_ERROR="mounting java dist"
|
|
}
|
|
|
|
unmount_dmg() {
|
|
local dir=$1
|
|
|
|
hdiutil unmount -quiet $dir
|
|
if [[ $? != 0 ]]; then
|
|
[[ -z "$ASDF_JAVA_ERROR" ]] || \
|
|
ASDF_JAVA_ERROR="unmounting java dist"
|
|
|
|
echo "---- ASDF JAVA WARNING ----"
|
|
echo "The java dist is still mounted at $dir."
|
|
echo " Use `hdiutil unmount` to unmount it."
|
|
echo "----"
|
|
fi
|
|
}
|
|
|
|
#
|
|
# MAIN
|
|
#
|
|
install_java $ASDF_INSTALL_VERSION $ASDF_INSTALL_PATH
|
|
|
|
if ! [[ -z "$ASDF_JAVA_ERROR" ]]; then
|
|
rm -rf $ASDF_INSTALL_PATH
|
|
|
|
echo "---- ASDF JAVA ERROR ----"
|
|
echo "asdf java failed while $ASDF_JAVA_ERROR"
|
|
echo "----"
|
|
fi
|
|
unset ASDF_JAVA_ERROR
|