ERROR: Error during SonarQube Scanner execution java.lang.UnsupportedClassVersionError: org/sonar/batch/bootstrapper/EnvironmentInformation has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 55.0 at java.base/java.lang.ClassLoader.defineClass1(Native Method) at java.base/java.lang.ClassLoader.defineClass(Unknown Source) at java.base/java.security.SecureClassLoader.defineClass(Unknown Source) at java.base/java.net.URLClassLoader.defineClass(Unknown Source) at java.base/java.net.URLClassLoader$1.run(Unknown Source) at java.base/java.net.URLClassLoader$1.run(Unknown Source) at java.base/java.security.AccessController.doPrivileged(Native Method) at java.base/java.net.URLClassLoader.findClass(Unknown Source) at org.sonarsource.scanner.api.internal.IsolatedClassloader.loadClass(IsolatedClassloader.java:82) at java.base/java.lang.ClassLoader.loadClass(Unknown Source) at org.sonarsource.scanner.api.internal.batch.DefaultBatchFactory.createBatch(DefaultBatchFactory.java:32) at org.sonarsource.scanner.api.internal.batch.BatchIsolatedLauncher.execute(BatchIsolatedLauncher.java:46) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.base/java.lang.reflect.Method.invoke(Unknown Source) at org.sonarsource.scanner.api.internal.IsolatedLauncherProxy.invoke(IsolatedLauncherProxy.java:60) at com.sun.proxy.$Proxy0.execute(Unknown Source) at org.sonarsource.scanner.api.EmbeddedScanner.doExecute(EmbeddedScanner.java:189) at org.sonarsource.scanner.api.EmbeddedScanner.execute(EmbeddedScanner.java:138) at org.sonarsource.scanner.cli.Main.execute(Main.java:112) at org.sonarsource.scanner.cli.Main.execute(Main.java:75) at org.sonarsource.scanner.cli.Main.main(Main.java:61) ERROR: ERROR: Re-run SonarQube Scanner using the -X switch to enable full debug logging.
2、问题根因
这个问题表现在于扫描环境中java版本的错误,要求执行sonar-scanner时Java版本 >= Java17(class version 61),但当前环境实际Java版本为Java11(class version 55),存在不支持的类,所以报错。这个问题本身很好解决,重新配置java环境变量即可,但这里面有个坑,配置的环境变量可能会不生效,需要专门的来说一下。
cat << 'EOF' > /opt/sonarqube/sonar-scanner/bin/sonar-scanner #!/bin/sh # # SonarQube Scanner Startup Script for Unix # # Optional ENV vars: # SONAR_SCANNER_OPTS - Parameters passed to the Java VM when running the SonarQube Scanner # SONAR_SCANNER_DEBUG_OPTS - Extra parameters passed to the Java VM for debugging # JAVA_HOME - Location of Java's installation
real_path () { target=$1
( while true; do cd "$(dirname "$target")" target=$(basename "$target") test -L "$target" || break target=$(readlink "$target") done
# check that sonar_scanner_home has been correctly set if [ ! -f "$jar_file" ] ; then echo "File does not exist: $jar_file" echo "'$sonar_scanner_home' does not point to a valid installation directory: $sonar_scanner_home" exit 1 fi
use_embedded_jre=false if [ "$use_embedded_jre" = true ]; then export JAVA_HOME=$sonar_scanner_home/jre fi
if [ -n "$JAVA_HOME" ] then java_cmd="$JAVA_HOME/bin/java" else java_cmd="$(which java)" fi
if [ -z "$java_cmd" -o ! -x "$java_cmd" ] ; then echo "Could not find 'java' executable in JAVA_HOME or PATH." exit 1 fi
project_home=$(pwd)
#echo "Info: Using sonar-scanner at $sonar_scanner_home" #echo "Info: Using java at $java_cmd" #echo "Info: Using classpath $jar_file" #echo "Info: Using project $project_home"