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
- Install the missing required plugin (matching key from the warning) into extensions/plugins and restart the server
- Remove or upgrade the dependent plugin so it no longer requires the absent plugin
- Check the plugin documentation for its dependency and correct the requiredPlugin key in plugin.properties if it was hand-edited
- 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
- Always install a plugin together with its documented required plugins
- After removing a plugin, scan logs for dependents and remove/upgrade them too
- Version-check plugin sets in your provisioning script before copying to extensions/plugins
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
- ############################################################…
- 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 version of required…
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)