From: Simon Brandhof Date: Mon, 11 May 2015 21:06:36 +0000 (+0200) Subject: SONAR-6517 fix sharing of plugin api packages across plugin classloaders X-Git-Tag: 5.2-RC1~1987 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=ed48e4f187504948ada7fc9ec39de85d1a37a6a9;p=sonarqube.git SONAR-6517 fix sharing of plugin api packages across plugin classloaders --- diff --git a/server/sonar-server/src/test/projects/test-base-plugin-v2/src/org/sonar/plugins/testbase/api/BaseApi.java b/server/sonar-server/src/test/projects/test-base-plugin-v2/src/org/sonar/plugins/testbase/api/BaseApi.java new file mode 100644 index 00000000000..356a9c829af --- /dev/null +++ b/server/sonar-server/src/test/projects/test-base-plugin-v2/src/org/sonar/plugins/testbase/api/BaseApi.java @@ -0,0 +1,6 @@ +package org.sonar.plugins.testbase.api; + +public class BaseApi { + public void doNothing() { + } +} diff --git a/server/sonar-server/src/test/projects/test-base-plugin-v2/target/test-base-plugin-0.2-SNAPSHOT.jar b/server/sonar-server/src/test/projects/test-base-plugin-v2/target/test-base-plugin-0.2-SNAPSHOT.jar index 9bd9e0e0fc1..32ac594aad1 100644 Binary files a/server/sonar-server/src/test/projects/test-base-plugin-v2/target/test-base-plugin-0.2-SNAPSHOT.jar and b/server/sonar-server/src/test/projects/test-base-plugin-v2/target/test-base-plugin-0.2-SNAPSHOT.jar differ diff --git a/server/sonar-server/src/test/projects/test-base-plugin/src/org/sonar/plugins/testbase/api/BaseApi.java b/server/sonar-server/src/test/projects/test-base-plugin/src/org/sonar/plugins/testbase/api/BaseApi.java new file mode 100644 index 00000000000..356a9c829af --- /dev/null +++ b/server/sonar-server/src/test/projects/test-base-plugin/src/org/sonar/plugins/testbase/api/BaseApi.java @@ -0,0 +1,6 @@ +package org.sonar.plugins.testbase.api; + +public class BaseApi { + public void doNothing() { + } +} diff --git a/server/sonar-server/src/test/projects/test-base-plugin/target/test-base-plugin-0.1-SNAPSHOT.jar b/server/sonar-server/src/test/projects/test-base-plugin/target/test-base-plugin-0.1-SNAPSHOT.jar index 2a6148ce7b6..f943a16b28f 100644 Binary files a/server/sonar-server/src/test/projects/test-base-plugin/target/test-base-plugin-0.1-SNAPSHOT.jar and b/server/sonar-server/src/test/projects/test-base-plugin/target/test-base-plugin-0.1-SNAPSHOT.jar differ diff --git a/server/sonar-server/src/test/projects/test-core-plugin/target/test-core-plugin-0.1-SNAPSHOT.jar b/server/sonar-server/src/test/projects/test-core-plugin/target/test-core-plugin-0.1-SNAPSHOT.jar index 62eba2aa80f..278b4596227 100644 Binary files a/server/sonar-server/src/test/projects/test-core-plugin/target/test-core-plugin-0.1-SNAPSHOT.jar and b/server/sonar-server/src/test/projects/test-core-plugin/target/test-core-plugin-0.1-SNAPSHOT.jar differ diff --git a/server/sonar-server/src/test/projects/test-extend-plugin/target/test-extend-plugin-0.1-SNAPSHOT.jar b/server/sonar-server/src/test/projects/test-extend-plugin/target/test-extend-plugin-0.1-SNAPSHOT.jar index 7a81fdf0cce..71dcee70496 100644 Binary files a/server/sonar-server/src/test/projects/test-extend-plugin/target/test-extend-plugin-0.1-SNAPSHOT.jar and b/server/sonar-server/src/test/projects/test-extend-plugin/target/test-extend-plugin-0.1-SNAPSHOT.jar differ diff --git a/server/sonar-server/src/test/projects/test-libs-plugin/target/test-libs-plugin-0.1-SNAPSHOT.jar b/server/sonar-server/src/test/projects/test-libs-plugin/target/test-libs-plugin-0.1-SNAPSHOT.jar index 85e4772f474..590d91b74f2 100644 Binary files a/server/sonar-server/src/test/projects/test-libs-plugin/target/test-libs-plugin-0.1-SNAPSHOT.jar and b/server/sonar-server/src/test/projects/test-libs-plugin/target/test-libs-plugin-0.1-SNAPSHOT.jar differ diff --git a/server/sonar-server/src/test/projects/test-require-plugin/pom.xml b/server/sonar-server/src/test/projects/test-require-plugin/pom.xml index 1f77e233f62..2c45fb3afb0 100644 --- a/server/sonar-server/src/test/projects/test-require-plugin/pom.xml +++ b/server/sonar-server/src/test/projects/test-require-plugin/pom.xml @@ -16,6 +16,13 @@ 4.5.4 provided + + org.codehaus.sonar.tests + test-base-plugin + 0.1-SNAPSHOT + sonar-plugin + provided + src diff --git a/server/sonar-server/src/test/projects/test-require-plugin/src/RequirePlugin.java b/server/sonar-server/src/test/projects/test-require-plugin/src/RequirePlugin.java index 440f73bfb58..80aa622cf84 100644 --- a/server/sonar-server/src/test/projects/test-require-plugin/src/RequirePlugin.java +++ b/server/sonar-server/src/test/projects/test-require-plugin/src/RequirePlugin.java @@ -5,6 +5,11 @@ import java.util.List; public class RequirePlugin extends SonarPlugin { + public RequirePlugin() { + // call a class that is in the api published by the base plugin + new org.sonar.plugins.testbase.api.BaseApi().doNothing(); + } + public List getExtensions() { return Collections.emptyList(); } diff --git a/server/sonar-server/src/test/projects/test-require-plugin/target/test-require-plugin-0.1-SNAPSHOT.jar b/server/sonar-server/src/test/projects/test-require-plugin/target/test-require-plugin-0.1-SNAPSHOT.jar index ac1f9f68e46..abf9bbed5eb 100644 Binary files a/server/sonar-server/src/test/projects/test-require-plugin/target/test-require-plugin-0.1-SNAPSHOT.jar and b/server/sonar-server/src/test/projects/test-require-plugin/target/test-require-plugin-0.1-SNAPSHOT.jar differ diff --git a/server/sonar-server/src/test/projects/test-requirenew-plugin/pom.xml b/server/sonar-server/src/test/projects/test-requirenew-plugin/pom.xml index ca207b10c19..58aee047206 100644 --- a/server/sonar-server/src/test/projects/test-requirenew-plugin/pom.xml +++ b/server/sonar-server/src/test/projects/test-requirenew-plugin/pom.xml @@ -16,6 +16,13 @@ 4.5.4 provided + + org.codehaus.sonar.tests + test-base-plugin + 0.1-SNAPSHOT + sonar-plugin + provided + src diff --git a/server/sonar-server/src/test/projects/test-requirenew-plugin/src/RequirePlugin.java b/server/sonar-server/src/test/projects/test-requirenew-plugin/src/RequirePlugin.java index 440f73bfb58..80aa622cf84 100644 --- a/server/sonar-server/src/test/projects/test-requirenew-plugin/src/RequirePlugin.java +++ b/server/sonar-server/src/test/projects/test-requirenew-plugin/src/RequirePlugin.java @@ -5,6 +5,11 @@ import java.util.List; public class RequirePlugin extends SonarPlugin { + public RequirePlugin() { + // call a class that is in the api published by the base plugin + new org.sonar.plugins.testbase.api.BaseApi().doNothing(); + } + public List getExtensions() { return Collections.emptyList(); } diff --git a/server/sonar-server/src/test/projects/test-requirenew-plugin/target/test-requirenew-plugin-0.1-SNAPSHOT.jar b/server/sonar-server/src/test/projects/test-requirenew-plugin/target/test-requirenew-plugin-0.1-SNAPSHOT.jar index 3437dfee71c..671f69f10f8 100644 Binary files a/server/sonar-server/src/test/projects/test-requirenew-plugin/target/test-requirenew-plugin-0.1-SNAPSHOT.jar and b/server/sonar-server/src/test/projects/test-requirenew-plugin/target/test-requirenew-plugin-0.1-SNAPSHOT.jar differ diff --git a/sonar-core/src/main/java/org/sonar/core/platform/PluginLoader.java b/sonar-core/src/main/java/org/sonar/core/platform/PluginLoader.java index 7afda907021..8722703d7f7 100644 --- a/sonar-core/src/main/java/org/sonar/core/platform/PluginLoader.java +++ b/sonar-core/src/main/java/org/sonar/core/platform/PluginLoader.java @@ -36,6 +36,7 @@ import java.net.URL; import java.util.Collection; import java.util.HashMap; import java.util.Map; +import org.sonar.classloader.Mask; import static java.util.Arrays.asList; import static org.sonar.classloader.ClassloaderBuilder.LoadingOrder.SELF_FIRST; @@ -56,7 +57,7 @@ import static org.sonar.classloader.ClassloaderBuilder.LoadingOrder.SELF_FIRST; */ public class PluginLoader implements BatchComponent, ServerComponent { - private static final String[] DEFAULT_SHARED_RESOURCES = {"org/sonar/plugins/", "com/sonar/plugins/", "com/sonarsource/plugins/"}; + private static final String[] DEFAULT_SHARED_RESOURCES = {"org/sonar/plugins", "com/sonar/plugins", "com/sonarsource/plugins"}; private final PluginExploder exploder; @@ -91,7 +92,7 @@ public class PluginLoader implements BatchComponent, ServerComponent { def.addMainClass(info.getKey(), info.getMainClass()); for (String defaultSharedResource : DEFAULT_SHARED_RESOURCES) { - def.getMask().addInclusion(defaultSharedResource + info.getKey() + "/"); + def.getMask().addInclusion(String.format("%s/%s/api/", defaultSharedResource, info.getKey())); } if (Strings.isNullOrEmpty(info.getBasePlugin())) { // The plugins that extend other plugins can only add some files to classloader. @@ -110,11 +111,17 @@ public class PluginLoader implements BatchComponent, ServerComponent { for (ClassloaderDef def : defs) { builder .newClassloader(def.getBasePluginKey(), getClass().getClassLoader()) + // resources to be exported to other plugin classloaders (siblings) .setExportMask(def.getBasePluginKey(), def.getMask()) .setLoadingOrder(def.getBasePluginKey(), def.isSelfFirstStrategy() ? SELF_FIRST : LoadingOrder.PARENT_FIRST); for (File file : def.getFiles()) { builder.addURL(def.getBasePluginKey(), fileToUrl(file)); } + for (ClassloaderDef sibling : defs) { + if (!sibling.getBasePluginKey().equals(def.getBasePluginKey())) { + builder.addSibling(def.getBasePluginKey(), sibling.getBasePluginKey(), new Mask()); + } + } } Map classloadersByBasePluginKey = builder.build(); for (ClassloaderDef def : defs) {