SonarSource/sonarqube · critical · RuntimeException
Failed to load core extension
Error message
Failed to load core extension
What it means
CoreExtensionsInstaller installs a core extension into the container by invoking its load() method; any exception during extension registration is wrapped in a RuntimeException naming the extension. This aborts SonarQube startup.
Solutions
- Read the wrapped cause in the stack trace to find the failing component
- Remove or update the misbehaving core extension jar
- Verify the extension version is compatible with the SonarQube version
- Check extension configuration properties for invalid values
Defensive patterns
Strategy: try-catch
Try / catch
try {
installer.install(container, filter, sideFilter, coreExtension);
} catch (RuntimeException e) {
LOG.error("Core extension {} failed to install", coreExtensionName, e.getCause());
throw e; // startup cannot continue safely
} Prevention
- Keep core extension jars compatible with the platform version
- Validate extension configuration before startup
- Test extensions in a staging environment before production upgrades
When it happens
Trigger: A core extension's load(Context) throws — e.g. a component fails to instantiate, a dependency is missing, or extension code throws during container wiring.
Common situations: Corrupt or incompatible plugin/core extension jars; version mismatch between extension and platform; extension's configuration is invalid.
Related errors
- ############################################################…
- Plugin [ ] is blacklisted and is being uninstalled
- Plugin [ ] is ignored because entry point class is not…
- Plugin [ ] is ignored because its base plugin [ ] is not…
- Plugin [ ] is ignored because the required plugin [ ] is…
AI-assisted analysis of SonarSource/sonarqube@184c821202 (2026-09-09).
Data as JSON: /api/errors/f06a519d79522200.
Report an issue: GitHub.
Appendix: source
Thrown at sonar-core/src/main/java/org/sonar/core/extension/CoreExtensionsInstaller.java:78
* @param extensionFilter filters extensions added to {@link CoreExtension.Context}. When it returns false, the
* extension is ignored as if it had never been added to the context.
* @param additionalSideFilter applied on top of filtering on {@link #supportedAnnotationType} to decide whether
* extension should be added to container as an object or only as a PropertyDefinition.
*/
public void install(ExtensionContainer container, Predicate<Object> extensionFilter, Predicate<Object> additionalSideFilter) {
coreExtensionRepository.loadedCoreExtensions()
.forEach(coreExtension -> install(container, extensionFilter, additionalSideFilter, coreExtension));
}
private void install(ExtensionContainer container, Predicate<Object> extensionFilter, Predicate<Object> additionalSideFilter, CoreExtension coreExtension) {
String coreExtensionName = coreExtension.getName();
try {
addDeclaredExtensions(container, extensionFilter, additionalSideFilter, coreExtension);
LOG.debug("Installed core extension: {}", coreExtensionName);
coreExtensionRepository.installed(coreExtension);
} catch (Exception e) {
throw new RuntimeException("Failed to load core extension " + coreExtensionName, e);
}
}
private void addDeclaredExtensions(ExtensionContainer container, Predicate<Object> extensionFilter, Predicate<Object> additionalSideFilter, CoreExtension coreExtension) {
ContextImpl context = new ContextImpl(container, extensionFilter, additionalSideFilter, coreExtension.getName());
coreExtension.load(context);
}
private class ContextImpl implements CoreExtension.Context {
private final ExtensionContainer container;
private final Predicate<Object> extensionFilter;
private final Predicate<Object> additionalSideFilter;
private final String extensionCategory;
public ContextImpl(ExtensionContainer container, Predicate<Object> extensionFilter, Predicate<Object> additionalSideFilter, String extensionCategory) {
this.container = container;
this.extensionFilter = extensionFilter;
this.additionalSideFilter = additionalSideFilter;View on GitHub (pinned to 184c821202)