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

  1. Read the wrapped cause in the stack trace to find the failing component
  2. Remove or update the misbehaving core extension jar
  3. Verify the extension version is compatible with the SonarQube version
  4. 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

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


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)