quarkusio/quarkus · error · IllegalArgumentException
Extension ${extension} was configured to require a capabilit
Error message
Extension ${extension} was configured to require a capability with an empty name: ${requiresStr} What it means
CapabilityContract.of() also validates the 'requires' capability list; any empty capability name in the requires string throws IllegalArgumentException. This keeps capability dependency metadata well-formed so conflict/missing-capability resolution works correctly.
Source
Thrown at independent-projects/bootstrap/app-model/src/main/java/io/quarkus/bootstrap/model/CapabilityContract.java:40
*/
@Deprecated(forRemoval = true)
public static CapabilityContract providesCapabilities(String extension, String commaSeparatedList) {
return of(extension, commaSeparatedList, null);
}
public static CapabilityContract of(String extension, String providesStr, String requiresStr) {
final Collection<String> provides = parseCapabilities(providesStr);
for (String name : provides) {
if (name.isEmpty()) {
throw new IllegalArgumentException("Extension " + extension
+ " was configured to provide a capability with an empty name: " + providesStr);
}
}
final Collection<String> requires = parseCapabilities(requiresStr);
for (String name : requires) {
if (name.isEmpty()) {
throw new IllegalArgumentException("Extension " + extension
+ " was configured to require a capability with an empty name: " + requiresStr);
}
}
return new CapabilityContract(extension, provides, requires);
}
private static Collection<String> parseCapabilities(String s) {
return s == null || s.isBlank() ? List.of() : Arrays.asList(capabilitiesPattern.split(s));
}
private final String extension;
private final Collection<String> providesCapabilities;
private final Collection<String> requiresCapabilities;
/**
* @deprecated in favor of {@link #CapabilityContract(String, Collection, Collection)}
*View on GitHub (pinned to e1c734241f)
Solutions
- Fix the requires string so it contains only non-empty comma-separated capability names.
- Sanitize input: split on comma, trim, filter blank entries before calling of().
- Locate which extension declares the malformed requires list and correct its build metadata.
Example fix
// before
CapabilityContract.of("my-ext", "io.quarkus.jpa", "io.quarkus.datasource,");
// after
String requires = Stream.of("io.quarkus.datasource,")
.map(String::trim).filter(s -> !s.isEmpty())
.collect(Collectors.joining(","));
CapabilityContract.of("my-ext", "io.quarkus.jpa", requires); Defensive patterns
Strategy: validation
Validate before calling
boolean valid = Arrays.stream(requiresStr.split(","))
.map(String::trim)
.allMatch(s -> !s.isEmpty());
if (!valid) throw new IllegalArgumentException("requires contains empty capability name: " + requiresStr); Try / catch
try {
return CapabilityContract.of(ext, provides, requires);
} catch (IllegalArgumentException e) {
throw new IllegalStateException("Malformed requires-capabilities for " + ext, e);
} Prevention
- Trim and filter capability entries before joining with commas.
- Validate generated capability strings in extension build scripts.
- Search extension config for 'quarkus.requires-capabilities' values with stray commas.
When it happens
Trigger: Calling CapabilityContract.of(extension, providesStr, requiresStr) where requiresStr parses to an empty name — e.g. trailing comma 'a,b,', double comma, or a whitespace-only segment.
Common situations: Hand-edited quarkus.requires-capabilities values in extension descriptors, generated strings with empty items from list joining, copy-paste of capability lists.
Related errors
- Extension ${extension} was configured to provide a capabilit
- Failed to load application configuration
- Failed to initialize application configuration
- Unrecognized option for quarkus.bootstrap.misaligned-platfor
- The configuration ${clazz} is missing the @ConfigRoot annota
AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05).
Data as JSON: /api/errors/b5bbb3500e6da1d2.
Report an issue: GitHub.