diff --git a/pf4j/src/main/java/org/pf4j/ClassLoadingStrategy.java b/pf4j/src/main/java/org/pf4j/ClassLoadingStrategy.java index 5a261cc..6b7f6fe 100644 --- a/pf4j/src/main/java/org/pf4j/ClassLoadingStrategy.java +++ b/pf4j/src/main/java/org/pf4j/ClassLoadingStrategy.java @@ -20,38 +20,44 @@ import java.util.List; /** * {@link ClassLoadingStrategy} will be used to configure {@link PluginClassLoader} loading order - * and contains all possible options supported by {@link PluginClassLoader} where - * A=Application Source ( load classes from parent classLoader) - * P=Plugin Source ( load classes from this classloader) - * D=Dependencies ( load classes from dependencies) + * and contains all possible options supported by {@link PluginClassLoader} where: + * {@code + * A = Application Source (load classes from parent classLoader) + * P = Plugin Source (load classes from this classloader) + * D = Dependencies (load classes from dependencies) + * } */ public class ClassLoadingStrategy { /** - * application(parent)->plugin->dependencies + * application(parent) -> plugin -> dependencies */ public static final ClassLoadingStrategy APD = new ClassLoadingStrategy(Arrays.asList(Source.APPLICATION, Source.PLUGIN, Source.DEPENDENCIES)); + /** - * application(parent)->dependencies->plugin + * application(parent) -> dependencies -> plugin */ - public static final ClassLoadingStrategy ADP=new ClassLoadingStrategy(Arrays.asList(Source.APPLICATION,Source.DEPENDENCIES,Source.APPLICATION)); + public static final ClassLoadingStrategy ADP = new ClassLoadingStrategy(Arrays.asList(Source.APPLICATION, Source.DEPENDENCIES, Source.APPLICATION)); + /** - * plugin->application(parent)->dependencies + * plugin -> application(parent) -> dependencies */ - public static final ClassLoadingStrategy PAD=new ClassLoadingStrategy(Arrays.asList(Source.PLUGIN,Source.APPLICATION,Source.DEPENDENCIES)); + public static final ClassLoadingStrategy PAD = new ClassLoadingStrategy(Arrays.asList(Source.PLUGIN, Source.APPLICATION, Source.DEPENDENCIES)); + /** - * dependencies->application(parent)->plugin + * dependencies -> application(parent) -> plugin */ - public static final ClassLoadingStrategy DAP=new ClassLoadingStrategy(Arrays.asList(Source.DEPENDENCIES,Source.APPLICATION,Source.PLUGIN)); + public static final ClassLoadingStrategy DAP = new ClassLoadingStrategy(Arrays.asList(Source.DEPENDENCIES, Source.APPLICATION, Source.PLUGIN)); + /** - * dependencies->plugin->application(parent) + * dependencies -> plugin -> application(parent) */ - public static final ClassLoadingStrategy DPA=new ClassLoadingStrategy(Arrays.asList(Source.DEPENDENCIES,Source.PLUGIN,Source.APPLICATION)); + public static final ClassLoadingStrategy DPA = new ClassLoadingStrategy(Arrays.asList(Source.DEPENDENCIES, Source.PLUGIN, Source.APPLICATION)); + /** - * plugin->dependencies->application(parent) + * plugin -> dependencies -> application(parent) */ - public static final ClassLoadingStrategy PDA =new ClassLoadingStrategy(Arrays.asList(Source.PLUGIN, Source.DEPENDENCIES, Source.APPLICATION)); - + public static final ClassLoadingStrategy PDA = new ClassLoadingStrategy(Arrays.asList(Source.PLUGIN, Source.DEPENDENCIES, Source.APPLICATION)); private final List sources; @@ -64,6 +70,7 @@ public class ClassLoadingStrategy { } public enum Source { - PLUGIN, APPLICATION,DEPENDENCIES; + PLUGIN, APPLICATION, DEPENDENCIES; } + } diff --git a/pf4j/src/main/java/org/pf4j/PluginClassLoader.java b/pf4j/src/main/java/org/pf4j/PluginClassLoader.java index f1faf00..4dbcb6a 100644 --- a/pf4j/src/main/java/org/pf4j/PluginClassLoader.java +++ b/pf4j/src/main/java/org/pf4j/PluginClassLoader.java @@ -62,7 +62,6 @@ public class PluginClassLoader extends URLClassLoader { this(pluginManager, pluginDescriptor, parent, parentFirst ? ClassLoadingStrategy.APD : ClassLoadingStrategy.PDA); } - /** * classloading according to {@code classLoadingStrategy} */ @@ -117,6 +116,7 @@ public class PluginClassLoader extends URLClassLoader { log.trace("Found loaded class '{}'", className); return loadedClass; } + for (ClassLoadingStrategy.Source classLoadingSource : classLoadingStrategy.getSources()) { Class c = null; try { @@ -131,17 +131,16 @@ public class PluginClassLoader extends URLClassLoader { c = loadClassFromDependencies(className); break; } - } catch (ClassNotFoundException ignored) { + } catch (ClassNotFoundException ignored) {} - } if (c != null) { - log.trace("Found class '{}' in {} classpath", className,classLoadingSource); + log.trace("Found class '{}' in {} classpath", className, classLoadingSource); return c; } else { - log.trace("Couldn't find class '{}' in {} classpath", className,classLoadingSource); + log.trace("Couldn't find class '{}' in {} classpath", className, classLoadingSource); } - } + throw new ClassNotFoundException(className); } } @@ -170,15 +169,16 @@ public class PluginClassLoader extends URLClassLoader { url = findResourceFromDependencies(name); break; } + if (url != null) { - log.trace("Found resource '{}' in {} classpath", name,classLoadingSource); + log.trace("Found resource '{}' in {} classpath", name, classLoadingSource); return url; } else { - log.trace("Couldn't find resource '{}' in {}.", name,classLoadingSource); + log.trace("Couldn't find resource '{}' in {}", name, classLoadingSource); } } - return null; + return null; } @Override @@ -201,8 +201,8 @@ public class PluginClassLoader extends URLClassLoader { break; } } - return Collections.enumeration(resources); + return Collections.enumeration(resources); } protected Class loadClassFromDependencies(String className) {