diff --git a/regression-test/java-udf-src/pom.xml b/regression-test/java-udf-src/pom.xml index 388bf795e1e..c8ab3ba71ad 100644 --- a/regression-test/java-udf-src/pom.xml +++ b/regression-test/java-udf-src/pom.xml @@ -26,8 +26,7 @@ under the License. Java UDF Case https://doris.apache.org/ - 8 - 8 + 17 3.1.3 @@ -85,10 +84,6 @@ under the License. org.apache.maven.plugins maven-compiler-plugin 3.10.1 - - 8 - 8 - diff --git a/run-regression-test.sh b/run-regression-test.sh index a81cb880e50..2630bfb9a36 100755 --- a/run-regression-test.sh +++ b/run-regression-test.sh @@ -23,6 +23,63 @@ ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)" DORIS_HOME="${ROOT}" +java_major_version() { + local java_cmd="$1" + local spec_version + + spec_version="$("${java_cmd}" -XshowSettings:properties -version 2>&1 \ + | awk -F'= ' '/java.specification.version =/ {print $2; exit}')" + # Cygwin's Java properties output uses CRLF line endings. + spec_version="${spec_version//$'\r'/}" + if [[ "${spec_version}" == 1.* ]]; then + spec_version="${spec_version#1.}" + fi + echo "${spec_version%%.*}" +} + +is_jdk17_home() { + local java_home="$1" + [[ -n "${java_home}" ]] && [[ -x "${java_home}/bin/java" ]] \ + && [[ -x "${java_home}/bin/javac" ]] \ + && [[ "$(java_major_version "${java_home}/bin/java")" == "17" ]] +} + +find_jdk17_home() { + local candidate + + for candidate in "${JAVA_HOME:-}" "${JDK_17:-}"; do + if is_jdk17_home "${candidate}"; then + echo "${candidate}" + return 0 + fi + done + + if [[ "$(uname -s)" == "Darwin" ]] && [[ -x /usr/libexec/java_home ]]; then + candidate="$(/usr/libexec/java_home -v 17 2>/dev/null || true)" + if is_jdk17_home "${candidate}"; then + echo "${candidate}" + return 0 + fi + elif [[ -d /usr/lib/jvm ]]; then + while IFS= read -r candidate; do + if is_jdk17_home "${candidate}"; then + echo "${candidate}" + return 0 + fi + done < <(find /usr/lib/jvm -mindepth 1 -maxdepth 1 \( -type d -o -type l \) 2>/dev/null | sort) + fi + + echo "Error: JDK 17 is required. Set JAVA_HOME or JDK_17, or install JDK 17." >&2 + return 1 +} + +JAVA_HOME="$(find_jdk17_home)" +export JAVA_HOME +export PATH="${JAVA_HOME}/bin:${PATH}" +export JAVA="${JAVA_HOME}/bin/java" +JAVA_MAJOR_VERSION="$(java_major_version "${JAVA}")" +echo "Using JDK ${JAVA_MAJOR_VERSION}: ${JAVA_HOME}" + # Check args usage() { echo " @@ -227,30 +284,8 @@ if ! test -f ${RUN_JAR:+${RUN_JAR}}; then mkdir -p "${DORIS_HOME}"/regression-test/suites/javaudf_p0/jars cd "${DORIS_HOME}"/regression-test/java-udf-src || { echo "Failed to change directory to java-udf-src"; exit 1; } - # The Java UDF jar must be built with JDK 8 (source/target 8, loaded by the BE embedded - # JVM), while the framework above is built with the ambient JDK (>=17 in CI). Switch to a - # JDK 8 just for this module, falling back to the ambient JDK if none is installed - # (e.g. local dev boxes). - udf_prev_java_home="${JAVA_HOME:-}" - udf_jdk8_home="$(find /usr/lib/jvm -maxdepth 1 -type d -name 'java-8-*' 2>/dev/null | sed -n '1p')" - if [[ -n "${udf_jdk8_home}" ]]; then - echo "Building Java UDF with JDK 8 at ${udf_jdk8_home}" - export JAVA_HOME="${udf_jdk8_home}" - else - echo "WARNING: no JDK 8 found under /usr/lib/jvm; building Java UDF with ${JAVA_HOME:-the current JDK}" - fi - - # Build UDF with retry - udf_build_rc=0 - execute_maven_with_retry "${MVN_CMD} clean package -B -DskipTests=true -Dmaven.javadoc.skip=true" || udf_build_rc=1 - - # Restore the framework JDK regardless of the UDF build result. - if [[ -n "${udf_prev_java_home}" ]]; then - export JAVA_HOME="${udf_prev_java_home}" - else - unset JAVA_HOME - fi - if [[ "${udf_build_rc}" -ne 0 ]]; then + # Build the UDF test jar with the same JDK 17 used by the regression framework. + if ! execute_maven_with_retry "${MVN_CMD} clean package -B -DskipTests=true -Dmaven.javadoc.skip=true"; then echo "Failed to build UDF package" exit 1 fi @@ -264,22 +299,6 @@ if ! test -f ${RUN_JAR:+${RUN_JAR}}; then cd "${DORIS_HOME}" || { echo "Failed to return to DORIS_HOME"; exit 1; } fi -# check java home -if [[ -z "${JAVA_HOME}" ]]; then - echo "Error: JAVA_HOME is not set" - exit 1 -fi - -# check java version -export JAVA="${JAVA_HOME}/bin/java" -JAVA_SPEC_VERSION="$("${JAVA}" -XshowSettings:properties -version 2>&1 \ - | awk -F'= ' '/java.specification.version =/ {print $2; exit}')" -JAVA_MAJOR_VERSION="${JAVA_SPEC_VERSION%%.*}" -if [[ "${JAVA_SPEC_VERSION}" == 1.* ]]; then - JAVA_MAJOR_VERSION="${JAVA_SPEC_VERSION#1.}" - JAVA_MAJOR_VERSION="${JAVA_MAJOR_VERSION%%.*}" -fi - # Arrow Flight SQL JDBC needs java.nio opened when the regression framework runs on JDK 17+. if [[ -n "${JAVA_MAJOR_VERSION}" ]] && [[ "${JAVA_MAJOR_VERSION}" -ge 17 ]] \ && [[ " ${JAVA_OPTS:-} " != *"--add-opens=java.base/java.nio="* ]]; then