oracle/graal · error · RuntimeError
The SPECJBB2015 environment variable was not specified.
Error message
The SPECJBB2015 environment variable was not specified.
What it means
SPECjbb2015 suite validation failure. specJbbClassPath() derives the path from the SPECJBB2015 environment variable; when it is unset, validateEnvironment() raises this RuntimeError before any run. (A related mx.abort fires earlier when the variable is set but the jar is missing.)
Source
Thrown at sdk/mx.sdk/mx_sdk_benchmark.py:3433
def vmArgs(self, bmSuiteArgs):
vmArgs = self.vmArgshHeapFromEnv(super().vmArgs(bmSuiteArgs))
return _get_specjbb_vmArgs(mx.get_jdk().javaCompliance) + vmArgs
def specJbbClassPath(self):
specjbb2015 = mx.get_env("SPECJBB2015")
if specjbb2015 is None:
mx.abort("Please set the SPECJBB2015 environment variable to a " +
"SPECjbb2015 directory.")
jbbpath = os.path.join(specjbb2015, "specjbb2015.jar")
if not os.path.exists(jbbpath):
mx.abort("The SPECJBB2015 environment variable points to a directory " +
"without the specjbb2015.jar file.")
return jbbpath
def validateEnvironment(self):
if not self.specJbbClassPath():
raise RuntimeError(
"The SPECJBB2015 environment variable was not specified.")
def validateReturnCode(self, retcode):
return retcode == 0
def workingDirectory(self, benchmarks, bmSuiteArgs):
return mx.get_env("SPECJBB2015")
def createCommandLineArgs(self, benchmarks, bmSuiteArgs):
if benchmarks is not None:
mx.abort("No benchmark should be specified for the selected suite.")
vmArgs = self.vmArgs(bmSuiteArgs)
if java_home_jdk().javaCompliance >= '9':
if java_home_jdk().javaCompliance < '11':
vmArgs += ["--add-modules", "java.xml.bind"]
else: # >= '11'
# JEP-320: Remove the Java EE and CORBA Modules in JDK11 http://openjdk.java.net/jeps/320
cp = []View on GitHub (pinned to a66e9ccd1d)
Solutions
- Export SPECJBB2015 to a directory containing specjbb2015.jar: export SPECJBB2015=/path/to/specjbb2015.
- Verify $SPECJBB2015/specjbb2015.jar exists, otherwise the run will abort with the 'points to a directory without the specjbb2015.jar file' error next.
- Do not pass a benchmark name to this suite (it runs the whole SPECjbb2015 workload).
Example fix
# before mx benchmark specjbb2015 # SPECJBB2015 unset -> RuntimeError # after export SPECJBB2015=/opt/benchmarks/specjbb2015 mx benchmark specjbb2015
Defensive patterns
Strategy: validation
Validate before calling
import os, pathlib
p = os.environ.get("SPECJBB2015")
assert p and (pathlib.Path(p) / "specjbb2015.jar").exists(), (
"SPECJBB2015 must point to a directory containing specjbb2015.jar") Prevention
- Set SPECJBB2015 in the CI environment definition, not interactively only.
- Remember the same variable is used as the working directory, so it must stay a valid directory for the whole run.
When it happens
Trigger: Running 'mx benchmark specjbb2015' without SPECJBB2015 exported; also note workingDirectory() returns that same env var, so it must be a valid directory for the run itself.
Common situations: SPECjbb2015 is license-restricted and often absent on CI; shells where the variable is set only in an interactive session and missing in cron/CI.
Related errors
- Neither {daCapoClasspathEnvVarName} variable nor {daCapoLibr
- The SPECJVM2008 environment variable was not specified.
- Launcher '{self.launcher}' does not resolve to an executable
- Environment variable 'GRAALOS_BUILD' is unset! It must point
- Environment variable 'GRAALOS_BUILD' points to '{build_dir}'
AI-assisted analysis of oracle/graal@a66e9ccd1d (2026-08-14).
Data as JSON: /api/errors/d278b087a913d608.
Report an issue: GitHub.