{"record":{"id":"0fae2ac060a654cc","repo":"SonarSource/sonarqube","slug":"plugin-is-blacklisted-and-is-being-uninsta","errorCode":null,"errorMessage":"Plugin {} [{}] is blacklisted and is being uninstalled","messagePattern":"Plugin (.+?) \\[(.+?)\\] is blacklisted and is being uninstalled","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"server/sonar-webserver-api/src/main/java/org/sonar/server/plugins/PluginJarLoader.java","lineNumber":203,"sourceCode":"\n  private static void failIfContainsIncompatiblePlugins(List<? extends PluginInfo> plugins) {\n    List<String> incompatiblePlugins = plugins.stream()\n      .filter(p -> FORBIDDEN_INCOMPATIBLE_PLUGINS.contains(p.getKey()))\n      .map(p -> \"'\" + p.getKey() + \"'\")\n      .sorted()\n      .toList();\n\n    if (!incompatiblePlugins.isEmpty()) {\n      logGenericPluginLoadErrorLog();\n      throw MessageException.of(String.format(\"The following %s no longer compatible with this version of SonarQube: %s\",\n        incompatiblePlugins.size() > 1 ? \"plugins are\" : \"plugin is\", String.join(\", \", incompatiblePlugins)));\n    }\n  }\n\n  private boolean checkPluginInfo(PluginInfo info) {\n    String pluginKey = info.getKey();\n    if (blacklistedPluginKeys.contains(pluginKey)) {\n      LOG.warn(\"Plugin {} [{}] is blacklisted and is being uninstalled\", info.getName(), pluginKey);\n      deleteQuietly(info.getNonNullJarFile());\n      return false;\n    }\n\n    if (Strings.isNullOrEmpty(info.getMainClass()) && Strings.isNullOrEmpty(info.getBasePlugin())) {\n      LOG.warn(\"Plugin {} [{}] is ignored because entry point class is not defined\", info.getName(), info.getKey());\n      return false;\n    }\n\n    if (!info.isCompatibleWith(sonarRuntime.getApiVersion().toString())) {\n      throw MessageException.of(format(\"Plugin %s [%s] requires at least Sonar Plugin API version %s (current: %s)\",\n        info.getName(), info.getKey(), info.getMinimalSonarPluginApiVersion(), sonarRuntime.getApiVersion()));\n    }\n    return true;\n  }\n\n  private static Collection<File> listJarFiles(File dir) {\n    if (dir.exists()) {","sourceCodeStart":185,"sourceCodeEnd":221,"githubUrl":"https://github.com/SonarSource/sonarqube/blob/184c821202192afc1c599fc912d0889b69fffa53/server/sonar-webserver-api/src/main/java/org/sonar/server/plugins/PluginJarLoader.java#L185-L221","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// before deploying a plugin, verify it is not blacklisted by checking\n// the SonarQube version release notes for the plugin key\nString key = pluginInfo.getKey();\nif (KNOWN_BLACKLISTED_KEYS.contains(key)) { System.out.println(\"Do not install: \" + key); }","typeGuard":null,"tryCatchPattern":null,"preventionTips":["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"],"tags":["sonarqube","plugins","blacklist","startup"],"backgroundTag":"unsupported-operation","analyzedSha":"184c821202192afc1c599fc912d0889b69fffa53","analyzedAt":"2026-09-09T12:23:51.573Z","contentChangedAt":"2026-09-09T12:23:51.573Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}