SonarSource/sonarqube · warning

Plugin [ ] is ignored because the required plugin [ ] is…

Error message

Plugin {} [{}] is ignored because the required plugin [{}] is not installed

What it means

PluginRequirementsValidator.isCompatible logs this warning and returns false when a plugin declares a requiredPlugin whose key is not present in the set of installed plugins. SonarQube then ignores (does not load) the plugin, because its dependency cannot be satisfied. It is a validation gate at server startup to prevent loading plugins with unmet dependencies.

Solutions

  1. Install the missing required plugin (matching key from the warning) into extensions/plugins and restart the server
  2. Remove or upgrade the dependent plugin so it no longer requires the absent plugin
  3. Check the plugin documentation for its dependency and correct the requiredPlugin key in plugin.properties if it was hand-edited
  4. Upgrade SonarQube/plugin versions so the dependency key matches the currently shipped plugin keys

Example fix

# before
extensions/plugins/my-plugin-1.0.jar   # requires 'sonar-findbugs' not installed
# after
extensions/plugins/my-plugin-1.0.jar
extensions/plugins/sonar-findbugs-plugin-4.2.4.jar  # dependency installed
Defensive patterns

Strategy: validation

Validate before calling

Set<String> installedKeys = installedPlugins.stream().map(PluginInfo::getKey).collect(toSet());
List<String> missing = plugin.getRequiredPlugins().stream()
  .map(PluginInfo.RequiredPlugin::getKey)
  .filter(k -> !installedKeys.contains(k))
  .collect(toSet());
if (!missing.isEmpty()) throw new IllegalStateException("Missing required plugins: " + missing);

Prevention

When it happens

Trigger: A plugin's manifest/plugin.properties declares 'requiredPlugin-<key>' for a plugin that is not installed in the SonarQube extensions/plugins directory when isCompatible runs during startup or plugin refresh.

Common situations: Installing a plugin A that depends on plugin B but forgetting to download/install B; uninstalling B while leaving A installed; a renamed or deprecated dependency plugin (key changed between SonarQube versions); plugin packaged with wrong dependency key.

Understand the failure class

Background: "not installed", "pip install", "required for": how missing-dependency errors surface across open-source libraries — this error's family across 34 libraries.

Related errors


AI-assisted analysis of SonarSource/sonarqube@184c821202 (2026-09-09). Data as JSON: /api/errors/47cbbcee210333b8. Report an issue: GitHub.

Appendix: source

Thrown at server/sonar-server-common/src/main/java/org/sonar/server/plugins/PluginRequirementsValidator.java:77

      }
      for (String removedKey : removedKeys) {
        pluginsByKey.remove(removedKey);
      }
    } while (!removedKeys.isEmpty());
  }

  boolean isCompatible(T plugin) {
    if (!Strings.isNullOrEmpty(plugin.getBasePlugin()) && !allPluginsByKeys.containsKey(plugin.getBasePlugin())) {
      // it extends a plugin that is not installed
      LOG.warn("Plugin {} [{}] is ignored because its base plugin [{}] is not installed", plugin.getName(), plugin.getKey(), plugin.getBasePlugin());
      return false;
    }

    for (PluginInfo.RequiredPlugin requiredPlugin : plugin.getRequiredPlugins()) {
      PluginInfo installedRequirement = allPluginsByKeys.get(requiredPlugin.getKey());
      if (installedRequirement == null) {
        // it requires a plugin that is not installed
        LOG.warn("Plugin {} [{}] is ignored because the required plugin [{}] is not installed", plugin.getName(), plugin.getKey(), requiredPlugin.getKey());
        return false;
      }
      Version installedRequirementVersion = installedRequirement.getVersion();
      if (installedRequirementVersion != null && requiredPlugin.getMinimalVersion().compareToIgnoreQualifier(installedRequirementVersion) > 0) {
        // it requires a more recent version
        LOG.warn("Plugin {} [{}] is ignored because the version {} of required plugin [{}] is not installed", plugin.getName(), plugin.getKey(),
            requiredPlugin.getMinimalVersion(), requiredPlugin.getKey());
        return false;
      }
    }
    return true;
  }

}

View on GitHub (pinned to 184c821202)