]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-14342 Deprecate Plugin-Dependencies attribute for plugins
authorDuarte Meneses <duarte.meneses@sonarsource.com>
Tue, 9 Feb 2021 17:59:21 +0000 (11:59 -0600)
committersonartech <sonartech@sonarsource.com>
Wed, 10 Feb 2021 20:07:17 +0000 (20:07 +0000)
server/sonar-webserver-api/src/main/java/org/sonar/server/plugins/PluginJarLoader.java
server/sonar-webserver-api/src/test/java/org/sonar/server/plugins/PluginJarLoaderTest.java

index c9c7ccf5a29ef26224f2b5563b93fb77d419b5f2..e202dfa94dffb8315350d41dede4fa0e5a2518cd 100644 (file)
@@ -137,7 +137,7 @@ public class PluginJarLoader {
     Set<String> removedKeys = new HashSet<>();
     do {
       removedKeys.clear();
-      for (PluginInfo plugin : pluginsByKey.values()) {
+      for (ServerPluginInfo plugin : pluginsByKey.values()) {
         if (!isCompatible(plugin, pluginsByKey)) {
           removedKeys.add(plugin.getKey());
         }
@@ -149,13 +149,18 @@ public class PluginJarLoader {
   }
 
   @VisibleForTesting
-  static boolean isCompatible(PluginInfo plugin, Map<String, ServerPluginInfo> allPluginsByKeys) {
+  static boolean isCompatible(ServerPluginInfo plugin, Map<String, ServerPluginInfo> allPluginsByKeys) {
     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;
     }
 
+    if (plugin.getType() != BUNDLED && !plugin.getRequiredPlugins().isEmpty()) {
+      LOG.warn("Use of 'Plugin-Dependencies' mechanism is planned for removal. Update the plugin {} [{}] to shade its dependencies instead.",
+        plugin.getName(), plugin.getKey());
+    }
+
     for (PluginInfo.RequiredPlugin requiredPlugin : plugin.getRequiredPlugins()) {
       PluginInfo installedRequirement = allPluginsByKeys.get(requiredPlugin.getKey());
       if (installedRequirement == null) {
index fba1606675576d9d1d55e17056629fb071760587..80686c8c23a806fd742d8a928e4e4b05dd59bbca 100644 (file)
@@ -196,6 +196,16 @@ public class PluginJarLoaderTest {
     assertThat(logs.logs()).contains("Plugin test [test] is ignored because entry point class is not defined");
   }
 
+  @Test
+  public void warn_if_external_plugin_has_dependencies() throws IOException {
+    copyTestPluginTo("test-base-plugin", fs.getInstalledExternalPluginsDir());
+    copyTestPluginTo("test-require-plugin", fs.getInstalledExternalPluginsDir());
+
+    underTest.loadPlugins();
+    assertThat(logs.logs()).contains("Use of 'Plugin-Dependencies' mechanism is planned for removal. "
+      + "Update the plugin Test Require Plugin [testrequire] to shade its dependencies instead.");
+  }
+
   @Test
   public void fail_if_external_plugin_has_same_key_has_bundled_plugin() throws IOException {
     File jar = createJar(fs.getInstalledExternalPluginsDir(), "plugin1", "main", null);