2017-09-21 15:45:15 +08:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
2017-09-28 03:52:10 +08:00
|
|
|
# this is global for error reporting
|
|
|
|
ASDF_JAVA_ERROR=""
|
|
|
|
|
2017-10-15 12:13:36 +08:00
|
|
|
# Download the java source from Oracle, copy files and cleanup.
|
2017-09-28 03:52:10 +08:00
|
|
|
install_java() {
|
|
|
|
local version=$1
|
|
|
|
local destdir=$2
|
|
|
|
|
|
|
|
local variant=$(get_variant)
|
|
|
|
[[ -z "$ASDF_JAVA_ERROR" ]] || return
|
|
|
|
|
2017-10-15 12:13:36 +08:00
|
|
|
get_java $version $variant $destdir
|
2017-09-28 03:52:10 +08:00
|
|
|
[[ -z "$ASDF_JAVA_ERROR" ]] || return
|
|
|
|
|
2017-10-15 12:13:36 +08:00
|
|
|
unpack_java $version $variant $destdir
|
|
|
|
[[ -z "$ASDF_JAVA_ERROR" ]] || return
|
2017-09-28 03:52:10 +08:00
|
|
|
}
|
|
|
|
|
2017-10-15 12:13:36 +08:00
|
|
|
# Get the "variant" piece of the Oracle url.
|
2017-09-28 03:52:10 +08:00
|
|
|
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 ;;
|
2017-11-01 05:52:09 +08:00
|
|
|
*) ASDF_JAVA_ERROR="$(uname -m) is not supported on linux" ;;
|
2017-09-28 03:52:10 +08:00
|
|
|
esac ;;
|
|
|
|
Darwin)
|
|
|
|
case "$(uname -m)" in
|
|
|
|
x86_64) echo macosx-x64.dmg ;;
|
2017-11-01 05:52:09 +08:00
|
|
|
*) ASDF_JAVA_ERROR="$(uname -m) is not supported on macos" ;;
|
2017-09-28 03:52:10 +08:00
|
|
|
esac ;;
|
2017-11-01 05:52:09 +08:00
|
|
|
*) ASDF_JAVA_ERROR="$(uname -s) is not supported" ;;
|
2017-09-28 03:52:10 +08:00
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
2017-11-01 05:52:09 +08:00
|
|
|
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
|
|
|
|
}
|
|
|
|
|
2017-10-15 12:13:36 +08:00
|
|
|
# Download java from Oracle.
|
2017-09-28 03:52:10 +08:00
|
|
|
get_java() {
|
|
|
|
local version=$1
|
|
|
|
local variant=$2
|
|
|
|
local destdir=$3
|
|
|
|
|
|
|
|
local url=
|
2017-11-18 07:39:06 +08:00
|
|
|
local base=http://download.oracle.com/otn-pub/java/jdk/
|
|
|
|
local oracle_version=$(echo $version | sed -e 's/\./u/g')
|
2017-09-28 03:52:10 +08:00
|
|
|
|
|
|
|
case $version in
|
2018-01-24 02:15:53 +08:00
|
|
|
9.0.4) url=$base$version+11/c2514751926b4512b076cc82f959763f/jdk-$version'_'$(get_current_variant $variant) ;;
|
2017-11-18 07:39:06 +08:00
|
|
|
9.0.1) url=$base$version+11/jdk-$version'_'$(get_current_variant $variant) ;;
|
2017-11-27 21:25:40 +08:00
|
|
|
8.151) url=$base$oracle_version-b12/e758a0de34e24606bca991d704f6dcbf/jdk-$oracle_version-$variant ;;
|
2017-11-18 07:39:06 +08:00
|
|
|
8.144) url=$base$oracle_version-b01/090f390dda5b47b9b721c7dfaa008135/jdk-$oracle_version-$variant ;;
|
|
|
|
8.141) url=$base$oracle_version-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-$oracle_version-$variant ;;
|
|
|
|
8.131) url=$base$oracle_version-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-$oracle_version-$variant ;;
|
|
|
|
8.121) url=$base$oracle_version-b13/e9e7ea248e2c4826b92b3f075a80e441/jdk-$oracle_version-$variant ;;
|
2017-10-15 12:13:36 +08:00
|
|
|
*) ASDF_JAVA_ERROR="$version is not a supported version" ;;
|
2017-09-28 03:52:10 +08:00
|
|
|
esac
|
|
|
|
[[ -z "$ASDF_JAVA_ERROR" ]] || return
|
|
|
|
|
2017-11-01 05:52:09 +08:00
|
|
|
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"
|
2017-09-28 03:52:10 +08:00
|
|
|
}
|
|
|
|
|
2017-10-15 12:13:36 +08:00
|
|
|
# Unpacks all kinds of sources.
|
2017-09-28 03:52:10 +08:00
|
|
|
unpack_java() {
|
|
|
|
local version=$1
|
|
|
|
local variant=$2
|
|
|
|
local destdir=$3
|
|
|
|
|
2017-11-01 05:52:09 +08:00
|
|
|
echo "---- ASDF JAVA MESSAGE ----"
|
|
|
|
echo "expanding java dist"
|
|
|
|
|
2017-09-28 03:52:10 +08:00
|
|
|
case $variant in
|
|
|
|
*.tar.gz) unpack_tar $variant $destdir ;;
|
2017-11-18 07:39:06 +08:00
|
|
|
*.dmg) unpack_dmg $variant $destdir ;;
|
2017-11-01 05:52:09 +08:00
|
|
|
*) ASDF_JAVA_ERROR="$variant is not supported" ;;
|
2017-09-28 03:52:10 +08:00
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
2017-10-15 12:13:36 +08:00
|
|
|
# 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.
|
2017-09-28 03:52:10 +08:00
|
|
|
unpack_tar() {
|
|
|
|
local variant=$1
|
|
|
|
local destdir=$2
|
|
|
|
|
|
|
|
local origin=$(pwd)
|
2017-10-15 12:13:36 +08:00
|
|
|
cd $destdir; {
|
2017-11-01 05:52:09 +08:00
|
|
|
tar -xzf $variant
|
2017-11-02 12:05:25 +08:00
|
|
|
[[ $? == 0 ]] || ASDF_JAVA_ERROR="expanding java dist"
|
2017-11-01 05:52:09 +08:00
|
|
|
rm $variant
|
2017-11-18 07:39:06 +08:00
|
|
|
|
|
|
|
local pkg=$(echo * | grep jdk)
|
|
|
|
mv $pkg/* .
|
|
|
|
rmdir $pkg
|
2017-11-01 05:52:09 +08:00
|
|
|
}; cd $origin
|
2017-09-28 03:52:10 +08:00
|
|
|
}
|
|
|
|
|
2017-10-15 12:13:36 +08:00
|
|
|
# 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.
|
2017-09-28 03:52:10 +08:00
|
|
|
unpack_dmg() {
|
|
|
|
local variant=$1
|
|
|
|
local destdir=$2
|
|
|
|
|
2017-10-15 12:13:36 +08:00
|
|
|
local origin=$(pwd)
|
|
|
|
cd $destdir; {
|
2017-11-01 05:52:09 +08:00
|
|
|
local pkgdir=$destdir/asdf_tmp_pkgdir
|
|
|
|
local imgdir=$destdir/asdf_tmp_imgdir
|
|
|
|
|
|
|
|
mount_dmg $imgdir $variant
|
|
|
|
[[ -z "$ASDF_JAVA_ERROR" ]] || return
|
|
|
|
|
2017-10-15 12:13:36 +08:00
|
|
|
pkgutil --expand $imgdir/*.pkg $pkgdir
|
2017-11-01 05:52:09 +08:00
|
|
|
if [[ $? != 0 ]]; then
|
|
|
|
ASDF_JAVA_ERROR="expanding java dist"
|
|
|
|
unmount_dmg $imgdir
|
|
|
|
return
|
|
|
|
fi
|
2017-10-15 12:13:36 +08:00
|
|
|
|
|
|
|
cd $pkgdir/jdk*.pkg; {
|
|
|
|
cat Payload | gzip -d | cpio -i
|
2017-11-01 05:52:09 +08:00
|
|
|
if [[ $? != 0 ]] || ! [[ -d Contents ]]; then
|
|
|
|
ASDF_JAVA_ERROR="demangling dist payload"
|
|
|
|
fi
|
2017-10-15 12:13:36 +08:00
|
|
|
mv Contents/Home/* $destdir/
|
2017-11-01 05:52:09 +08:00
|
|
|
}; cd $destdir
|
2017-10-15 12:13:36 +08:00
|
|
|
|
2017-11-01 05:52:09 +08:00
|
|
|
unmount_dmg $imgdir
|
2017-10-15 12:13:36 +08:00
|
|
|
rm -r $destdir/$variant
|
2017-11-01 05:52:09 +08:00
|
|
|
}; 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
|
2017-09-28 03:52:10 +08:00
|
|
|
}
|
|
|
|
|
2017-10-15 12:13:36 +08:00
|
|
|
#
|
|
|
|
# MAIN
|
|
|
|
#
|
2017-09-28 03:52:10 +08:00
|
|
|
install_java $ASDF_INSTALL_VERSION $ASDF_INSTALL_PATH
|
|
|
|
|
2017-11-01 05:52:09 +08:00
|
|
|
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
|
2017-09-28 03:52:10 +08:00
|
|
|
unset ASDF_JAVA_ERROR
|