quarkusio/quarkus · error · IllegalArgumentException
both extensionConfiguration and extensionDescriptor are null
Error message
both extensionConfiguration and extensionDescriptor are null
What it means
createExtensionDependency builds an ExtensionDependency for a local Quarkus extension project from either the quarkusExt extension's configuration (QuarkusExtensionConfiguration) or the parsed quarkus-extension.properties descriptor. It requires at least one of them; if both are null there is no way to determine the deployment module or conditional dependencies, so an IllegalArgumentException is thrown. In practice callers only invoke it after finding one of the two, so this signals an internal inconsistency.
Source
Thrown at devtools/gradle/gradle-model/src/main/java/io/quarkus/gradle/tooling/dependency/DependencyUtils.java:222
}
}
if (extensionProject != null) {
return getExtensionInfoOrNull(project, extensionProject);
}
return null;
}
private static ProjectExtensionDependency createExtensionDependency(
Project project,
ModuleVersionIdentifier extensionArtifactId,
Project extensionProject,
@Nullable Object extensionConfiguration,
@Nullable Properties extensionDescriptor,
boolean isIncludedBuild) {
if (extensionConfiguration == null && extensionDescriptor == null) {
throw new IllegalArgumentException("both extensionConfiguration and extensionDescriptor are null");
}
Project deploymentProject = null;
if (extensionConfiguration != null) {
final String deploymentProjectPath = ConfigurationUtils.getDeploymentModule(extensionConfiguration).get();
deploymentProject = ToolingUtils.findLocalProject(extensionProject, deploymentProjectPath);
if (deploymentProject == null) {
throw new GradleException("Cannot find deployment project for extension " + extensionArtifactId + " at path "
+ deploymentProjectPath);
}
} else if (extensionDescriptor.containsKey(BootstrapConstants.PROP_DEPLOYMENT_ARTIFACT)) {
final ArtifactCoords deploymentArtifact = ArtifactCoords
.fromString(extensionDescriptor.getProperty(BootstrapConstants.PROP_DEPLOYMENT_ARTIFACT));
deploymentProject = ToolingUtils.findLocalProject(project, deploymentArtifact);
if (deploymentProject == null) {
throw new GradleException("Cannot find deployment project for extension " + extensionArtifactIdView on GitHub (pinned to e1c734241f)
Solutions
- Verify the project actually is a Quarkus extension: it should have either the quarkus extension config (quarkus { } block via the quarkus-gradle-plugin applied) or META-INF/quarkus-extension.properties
- Ensure the io.quarkus.extension gradle plugin is applied to the extension project and that the quarkus { deploymentModule } value points to an existing project
- Check the descriptor file is valid properties (not empty/corrupt) if you rely on descriptor-based detection
- Update/align the Quarkus Gradle plugin versions across build and included builds
- If it persists with a valid extension, report with the project's build.gradle and descriptor contents
Example fix
// before (resources contain quarkus-extension.properties but no quarkus ext config)
plugins { id 'java' }
// after
plugins { id 'java'; id 'io.quarkus.extension' }
quarkus { deploymentModule = project(':my-ext-deployment') } Defensive patterns
Strategy: validation
Validate before calling
Object cfg = extProject.getExtensions().findByName("quarkus");
Path desc = findDescriptor(extProject); // scan resource dirs
if (cfg == null && desc == null) {
throw new IllegalStateException("Not a Quarkus extension project: " + extProject.getPath());
} Try / catch
try {
var dep = DependencyUtils.getProjectExtensionDependencyOrNull(project, path, buildPath);
} catch (IllegalArgumentException e) {
if (e.getMessage().contains("both extensionConfiguration and extensionDescriptor are null")) {
// ensure the io.quarkus.extension plugin is applied before retrying
} else throw e;
} Prevention
- Apply the io.quarkus.extension plugin to every local extension project
- Keep quarkus-extension.properties valid and present in main resources
- Evaluate extension projects before tooling reads their configurations
- Align Quarkus plugin versions across the build and included builds
When it happens
Trigger: getExtensionInfoOrNull detects an extension (descriptorPath found or extensionConfiguration found) but race/bug clears both inputs before createExtensionDependency — e.g. descriptorPath becomes null but the descriptor Properties passed is null while configuration is also absent.
Common situations: A project that looks like an extension (has quarkus-extension.properties in resources) but lacks the quarkus { } extension configuration, combined with a tooling bug or a misapplied evaluation order; snapshots where tooling and plugin disagree.
Related errors
- Cannot find deployment project for extension ${extensionArti
- Unknown ExtensionDependency type: ${dependency.getClass().ge
- Failed to parse removed resource '
- Failed to persist extension descriptor
- e.getMessage()
AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05).
Data as JSON: /api/errors/10b2c691e28ddfa7.
Report an issue: GitHub.