-#!/bin/bash
+#!/bin/sh
# SPDX-License-Identifier: EPL-1.0
##############################################################################
# Copyright (c) 2018 The Linux Foundation and others.
JAVA_ENV_FILE="/tmp/java.env"
-update-java-redhat() {
- JAVA_RELEASE=${SET_JDK_VERSION//[a-zA-Z]/}
- if [[ ${JAVA_RELEASE} -ge 9 ]]; then
+JAVA_RELEASE=$(echo "$SET_JDK_VERSION" | sed 's/[a-zA-Z]//g')
+JAVA_RELEASE_NBR=$(echo "$SET_JDK_VERSION" | sed 's/[a-zA-Z:-]//g')
+#TODO check whether is it worth keeping there 2 distinct variables
+update_java_redhat() {
+ if [ "${JAVA_RELEASE}" -ge 9 ]; then
# Java 9 or newer: new version format
export JAVA_HOME="/usr/lib/jvm/java-${JAVA_RELEASE}-openjdk"
else
# Java 8 or older: old version format
- export JAVA_HOME="/usr/lib/jvm/java-1.${SET_JDK_VERSION//[a-zA-Z:-]/}.0-openjdk"
+ export JAVA_HOME="/usr/lib/jvm/java-1.${JAVA_RELEASE_NBR}.0-openjdk"
fi
- sudo /usr/sbin/alternatives --install /usr/bin/java java "${JAVA_HOME}/bin/java" 1
- sudo /usr/sbin/alternatives --install /usr/bin/javac javac "${JAVA_HOME}/bin/javac" 1
- sudo /usr/sbin/alternatives --install /usr/lib/jvm/java-openjdk java_sdk_openjdk "${JAVA_HOME}" 1
- sudo /usr/sbin/alternatives --set java "${JAVA_HOME}/bin/java"
- sudo /usr/sbin/alternatives --set javac "${JAVA_HOME}/bin/javac"
- sudo /usr/sbin/alternatives --set java_sdk_openjdk "${JAVA_HOME}"
- echo JAVA_HOME="$JAVA_HOME" > "$JAVA_ENV_FILE"
}
-update-java-ubuntu() {
+update_java_ubuntu() {
HOST_ARCH=$(dpkg --print-architecture)
- export JAVA_HOME="/usr/lib/jvm/java-${SET_JDK_VERSION//[a-zA-Z:-]/}-openjdk-${HOST_ARCH}"
- sudo /usr/bin/update-alternatives --install /usr/bin/java java "${JAVA_HOME}/bin/java" 1
- sudo /usr/bin/update-alternatives --install /usr/bin/javac javac "${JAVA_HOME}/bin/javac" 1
- sudo /usr/bin/update-alternatives --install /usr/lib/jvm/java-openjdk java_sdk_openjdk "${JAVA_HOME}" 1
- sudo /usr/bin/update-alternatives --set java "${JAVA_HOME}/bin/java"
- sudo /usr/bin/update-alternatives --set javac "${JAVA_HOME}/bin/javac"
- sudo /usr/bin/update-alternatives --set java_sdk_openjdk "${JAVA_HOME}"
- echo JAVA_HOME="$JAVA_HOME" > "$JAVA_ENV_FILE"
+ export JAVA_HOME="/usr/lib/jvm/java-${JAVA_RELEASE_NBR}-openjdk-${HOST_ARCH}"
}
echo "---> Updating Java version"
case "${OS}" in
fedora|centos|redhat)
echo "---> RedHat type system detected"
- update-java-redhat
+ update_java_redhat
+ alternatives="/usr/sbin/alternatives"
;;
ubuntu|debian)
echo "---> Ubuntu/Debian system detected"
- update-java-ubuntu
+ update_java_ubuntu
+ alternatives=$(which update-alternatives)
;;
esac
+
+if ! [ -d "$JAVA_HOME" ]; then
+ echo "$JAVA_HOME directory not found - trying to find an approaching one"
+ if ls -d "$JAVA_HOME"*; then
+ # shellcheck disable=SC2012
+ JAVA_HOME=$(ls -d "$JAVA_HOME"* | head -1)
+ export JAVA_HOME
+ else
+ echo "no $JAVA_HOME directory nor candidate found -exiting " >&2
+ exit 17
+ fi
+fi
+
+# If sudo is not found, the commands below will run anyway
+SUDO_CMD=$(which sudo)
+
+$SUDO_CMD "$alternatives" --install /usr/bin/java java "${JAVA_HOME}/bin/java" 1
+$SUDO_CMD "$alternatives" --install /usr/bin/javac javac "${JAVA_HOME}/bin/javac" 1
+$SUDO_CMD "$alternatives" --install /usr/lib/jvm/java-openjdk java_sdk_openjdk "${JAVA_HOME}" 1
+$SUDO_CMD "$alternatives" --set java "${JAVA_HOME}/bin/java"
+$SUDO_CMD "$alternatives" --set javac "${JAVA_HOME}/bin/javac"
+$SUDO_CMD "$alternatives" --set java_sdk_openjdk "${JAVA_HOME}"
+echo JAVA_HOME="$JAVA_HOME" > "$JAVA_ENV_FILE"
+
java -version
echo JAVA_HOME="${JAVA_HOME}"