SonarSource/sonarqube · warning
Plugin [ ] is blacklisted and is being uninstalled
Error message
Plugin {} [{}] is blacklisted and is being uninstalled What it means
PluginJarLoader.checkPluginInfo validates each plugin JAR at startup against a list of blacklisted plugin keys. If a plugin's key is blacklisted, SonarQube logs this warning and deletes the plugin JAR file, refusing to load it.
Solutions
- Remove the blacklisted plugin JAR from extensions/plugins and restart the server.
- Check SonarQube release notes for the blacklisted key and install the fixed/supported plugin version instead.
- If you believe the blacklist is wrong, verify the plugin's sonar-plugin key in its MANIFEST/properties matches what you expect.
Defensive patterns
Strategy: validation
Validate before calling
// before deploying a plugin, verify it is not blacklisted by checking
// the SonarQube version release notes for the plugin key
String key = pluginInfo.getKey();
if (KNOWN_BLACKLISTED_KEYS.contains(key)) { System.out.println("Do not install: " + key); } Prevention
- Check SonarQube release notes for blacklisted plugin keys before upgrades
- Keep plugins at versions compatible with your SonarQube version
- Do not restore old extensions/plugins directories after major upgrades
When it happens
Trigger: Server startup when a plugin JAR in extensions/plugins has a key present in blacklistedPluginKeys; the loader logs the warning with the plugin name and key, deletes info.getNonNullJarFile(), and skips loading it.
Common situations: Installing a plugin version that SonarSource has blacklisted for known bugs or security issues (e.g. vulnerable or broken releases of popular community plugins); upgrading SonarQube while an old incompatible plugin remains.
Understand the failure class
Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.
Related errors
- ############################################################…
- 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…
- Plugin(s) detected. Plugins are not provided by SonarSource…
AI-assisted analysis of SonarSource/sonarqube@184c821202 (2026-09-09).
Data as JSON: /api/errors/0fae2ac060a654cc.
Report an issue: GitHub.
Appendix: source
Thrown at server/sonar-webserver-api/src/main/java/org/sonar/server/plugins/PluginJarLoader.java:203
private static void failIfContainsIncompatiblePlugins(List<? extends PluginInfo> plugins) {
List<String> incompatiblePlugins = plugins.stream()
.filter(p -> FORBIDDEN_INCOMPATIBLE_PLUGINS.contains(p.getKey()))
.map(p -> "'" + p.getKey() + "'")
.sorted()
.toList();
if (!incompatiblePlugins.isEmpty()) {
logGenericPluginLoadErrorLog();
throw MessageException.of(String.format("The following %s no longer compatible with this version of SonarQube: %s",
incompatiblePlugins.size() > 1 ? "plugins are" : "plugin is", String.join(", ", incompatiblePlugins)));
}
}
private boolean checkPluginInfo(PluginInfo info) {
String pluginKey = info.getKey();
if (blacklistedPluginKeys.contains(pluginKey)) {
LOG.warn("Plugin {} [{}] is blacklisted and is being uninstalled", info.getName(), pluginKey);
deleteQuietly(info.getNonNullJarFile());
return false;
}
if (Strings.isNullOrEmpty(info.getMainClass()) && Strings.isNullOrEmpty(info.getBasePlugin())) {
LOG.warn("Plugin {} [{}] is ignored because entry point class is not defined", info.getName(), info.getKey());
return false;
}
if (!info.isCompatibleWith(sonarRuntime.getApiVersion().toString())) {
throw MessageException.of(format("Plugin %s [%s] requires at least Sonar Plugin API version %s (current: %s)",
info.getName(), info.getKey(), info.getMinimalSonarPluginApiVersion(), sonarRuntime.getApiVersion()));
}
return true;
}
private static Collection<File> listJarFiles(File dir) {
if (dir.exists()) {View on GitHub (pinned to 184c821202)