{"record":{"id":"def92e91a52a0e3b","repo":"oracle/graal","slug":"could-not-execute-jdk-java","errorCode":null,"errorMessage":"Could not execute {jdk.java}","messagePattern":"Could not execute (.+?)","errorType":"exception","errorClass":"AssertionError","httpStatus":null,"severity":"error","filePath":"sdk/mx.sdk/mx_sdk_vm.py","lineNumber":600,"sourceCode":"            _base_jdk_final = _base_jdk_stage1\n    return _base_jdk_final\n\n\ndef base_jdk_version(stage1=True):\n    return base_jdk(stage1=stage1).javaCompliance.value\n\ndef get_jdk_version_for_profiles():\n    jdk_version = mx.get_jdk().javaCompliance.value\n    return '_LATEST' if jdk_version > 21 else jdk_version\n\ndef _probe_jvmci_info(jdk, attribute_name):\n    if not hasattr(jdk, '.enables_jvmci_by_default'):\n        out = mx.LinesOutputCapture()\n        def sink(x):\n            return x\n        rc = mx.run([jdk.java, '-XX:+UnlockExperimentalVMOptions', '-XX:+PrintFlagsFinal', '-version'], out=out, err=sink, nonZeroIsFatal=False)\n        if rc != 0:\n            raise AssertionError(f\"Could not execute {jdk.java}\")\n        enableJVMCI = False\n        jvmciThreadsPerNativeLibraryRuntime = None\n        for line in out.lines:\n            if 'EnableJVMCI' in line and 'true' in line:\n                enableJVMCI = True\n            if 'JVMCIThreadsPerNativeLibraryRuntime' in line:\n                m = re.search(r'JVMCIThreadsPerNativeLibraryRuntime *= *(\\d+)', line)\n                if not m:\n                    mx.abort(f'Could not extract value of JVMCIThreadsPerNativeLibraryRuntime from \"{line}\"')\n                jvmciThreadsPerNativeLibraryRuntime = int(m.group(1))\n        setattr(jdk, '.enables_jvmci_by_default', enableJVMCI)\n        setattr(jdk, '.jvmciThreadsPerNativeLibraryRuntime', jvmciThreadsPerNativeLibraryRuntime)\n    return getattr(jdk, attribute_name)\n\ndef jdk_enables_jvmci_by_default(jdk):\n    \"\"\"\n    Gets the default value for the EnableJVMCI VM option in `jdk`.\n    \"\"\"","sourceCodeStart":582,"sourceCodeEnd":618,"githubUrl":"https://github.com/oracle/graal/blob/a66e9ccd1d7bf2552883939aa0788dfd0e294aab/sdk/mx.sdk/mx_sdk_vm.py#L582-L618","documentation":"mx probes the JDK for JVMCI support by running 'java -XX:+UnlockExperimentalVMOptions -XX:+PrintFlagsFinal -version'. A non-zero return code (java not executable, broken JDK, or unsupported flags) causes AssertionError 'Could not execute <java path>'.","triggerScenarios":"JAVA_HOME/jdk set to a broken, partial, or non-JVMCI-aware JDK; the java binary missing execute permission; a JDK too old/new such that the probe flags are rejected.","commonSituations":"Pointing mx at a JRE instead of a full JDK; truncated JDK extraction; docker images with a stripped java; switching JDKs mid-session with stale cached probe results.","solutions":["Run the probe command manually with the reported path: <jdk>/bin/java -XX:+UnlockExperimentalVMOptions -XX:+PrintFlagsFinal -version, and read its error.","Fix or reinstall the JDK, or point mx at a valid JDK via --java-home/JAVA_HOME (a full JDK, not a JRE).","Use a GraalVM-supported JDK version so the experimental flags exist."],"exampleFix":"# before\nexport JAVA_HOME=/opt/jre11   # probe fails -> AssertionError\n\n# after\nexport JAVA_HOME=/opt/jdk21\nmx --java-home=/opt/jdk21 build","handlingStrategy":"validation","validationCode":"import subprocess, os\njava = os.path.join(jdk_path, \"bin\", \"java\")\nrc = subprocess.run([java, \"-XX:+UnlockExperimentalVMOptions\", \"-XX:+PrintFlagsFinal\", \"-version\"]).returncode\nassert rc == 0, f\"JDK probe failed (rc={rc}); fix or replace the JDK at {jdk_path}\"","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Point mx at a full JDK (not a JRE) of a supported version via --java-home.","Smoke-test 'java -version' plus the probe flags when provisioning CI images or docker containers.","Re-run mx suite commands in a fresh shell after switching JDKs to avoid stale probe caches."],"tags":["graalvm","jdk","environment","jvmci","mx"],"backgroundTag":null,"analyzedSha":"a66e9ccd1d7bf2552883939aa0788dfd0e294aab","analyzedAt":"2026-08-14T13:58:47.161Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}