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

  1. Export SPECJBB2015 to a directory containing specjbb2015.jar: export SPECJBB2015=/path/to/specjbb2015.
  2. Verify $SPECJBB2015/specjbb2015.jar exists, otherwise the run will abort with the 'points to a directory without the specjbb2015.jar file' error next.
  3. 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

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


AI-assisted analysis of oracle/graal@a66e9ccd1d (2026-08-14). Data as JSON: /api/errors/d278b087a913d608. Report an issue: GitHub.