oracle/graal · error · IllegalArgumentException
At least one non-zero version must be specified.
Error message
At least one non-zero version must be specified.
What it means
Version.create(int... versions) trims trailing zeros and then requires at least one non-zero component; an all-zero (or empty after trimming) input throws IllegalArgumentException('At least one non-zero version must be specified.'). A Version must be orderable and distinguishable from nothing, so '0' / '0.0.0' / {} are not constructible. Negative components throw a separate 'Versions must not be negative.' error.
Source
Thrown at sdk/src/org.graalvm.home/src/org/graalvm/home/Version.java:390
*/
public static Version parse(String versionString) throws IllegalArgumentException {
Objects.requireNonNull(versionString);
return new Version(versionString);
}
/**
* Constructs a new GraalVM version from a list of version numbers. The versions must not be
* <code>null</code> and none of the version numbers must be negative. At least one version
* number must be non-zero.
*
* @see #compareTo(int...)
* @since 19.3
*/
public static Version create(int... versions) throws IllegalArgumentException {
Objects.requireNonNull(versions);
int[] useVersions = trimTrailingZeros(versions);
if (useVersions.length == 0) {
throw new IllegalArgumentException("At least one non-zero version must be specified.");
}
for (int i = 0; i < useVersions.length; i++) {
if (useVersions[i] < 0) {
throw new IllegalArgumentException("Versions must not be negative.");
}
}
return new Version(useVersions);
}
/**
* Returns the current GraalVM version of the installed component. Never <code>null</code>.
*
* @see HomeFinder#getVersion()
* @since 19.3
*/
public static Version getCurrent() {
return parse(HomeFinder.getInstance().getVersion());
}View on GitHub (pinned to a66e9ccd1d)
Solutions
- Validate before creating: if all components are 0 (or the array is empty), skip/reject rather than call Version.create.
- Treat an unparsable/empty version string as 'unknown' in your own code path (e.g. fall back to Version.current() or a minimum supported Version.create(1)) instead of forwarding zeros.
- When parsing, require at least one numeric component and reject empty strings before building the int array.
Example fix
// before
Version v = Version.create(major, minor, rev); // all 0 when parse failed
// after
if (major == 0 && minor == 0 && rev == 0) {
throw new IllegalArgumentException("Invalid version string: " + input);
}
Version v = Version.create(major, minor, rev); Defensive patterns
Strategy: validation
Validate before calling
static boolean isCreatable(int... comps) {
for (int c : comps) {
if (c != 0) return true;
}
return false; // Version.create would throw
} Try / catch
try {
Version v = Version.create(comps);
} catch (IllegalArgumentException e) {
// unparsable or all-zero input; use fallback e.g. Version.create(1)
Version v = Version.create(1);
} Prevention
- Reject empty/all-zero version inputs at parse time with your own error message.
- Default failed parses to a known minimum version, not to zeros.
- Unit-test version parsing against '', '0', and '0.0' inputs.
When it happens
Trigger: Calling Version.create(), Version.create(0), Version.create(0, 0), or Version.create(0, 0, 0); building a Version from parsed digits where every field defaulted to 0 (e.g. parsing an empty or malformed version string produced all zeros); tests constructing boundary-case versions.
Common situations: Parsing code that splits a version string on '.' and converts fields with a default of 0, then calls create() even when nothing was parsed; feature gating that computes a version from environment variables which are unset; placeholder version objects during development.
Related errors
- componentIndex must be non-negative: <componentIndex>
- Cannot compare {JavaLangRuntimeVersion.__name__} to {type(ot
- Invalid replay boolean flag
- Required replay field is null
- Unexpected architecture name ${archName}
AI-assisted analysis of oracle/graal@a66e9ccd1d (2026-08-14).
Data as JSON: /api/errors/a69d89e8448871b7.
Report an issue: GitHub.