aboutsummaryrefslogtreecommitdiffstats
path: root/pf4j/src
diff options
context:
space:
mode:
authorDecebal Suiu <decebal.suiu@gmail.com>2015-08-06 16:46:08 +0300
committerDecebal Suiu <decebal.suiu@gmail.com>2015-08-06 16:46:08 +0300
commit7dc4007c27d9898a04ceeca2aa9ceb1da3637d6e (patch)
tree1773880775a6e2f1c904cbae0091e7dcb5ade9ea /pf4j/src
parentc5a8022e5aea87c0ff613eb4c27ce8af795208fc (diff)
downloadpf4j-7dc4007c27d9898a04ceeca2aa9ceb1da3637d6e.tar.gz
pf4j-7dc4007c27d9898a04ceeca2aa9ceb1da3637d6e.zip
fix #63
Diffstat (limited to 'pf4j/src')
-rw-r--r--pf4j/src/main/java/ro/fortsoft/pf4j/DefaultPluginManager.java14
-rw-r--r--pf4j/src/main/java/ro/fortsoft/pf4j/PluginLoader.java29
2 files changed, 19 insertions, 24 deletions
diff --git a/pf4j/src/main/java/ro/fortsoft/pf4j/DefaultPluginManager.java b/pf4j/src/main/java/ro/fortsoft/pf4j/DefaultPluginManager.java
index a6437e5..6976d3d 100644
--- a/pf4j/src/main/java/ro/fortsoft/pf4j/DefaultPluginManager.java
+++ b/pf4j/src/main/java/ro/fortsoft/pf4j/DefaultPluginManager.java
@@ -718,6 +718,13 @@ public class DefaultPluginManager implements PluginManager {
return new DefaultExtensionFactory();
}
+ /**
+ * Add the possibility to override the PluginClassLoader.
+ */
+ protected PluginClassLoader createPluginClassLoader(PluginDescriptor pluginDescriptor) {
+ return new PluginClassLoader(this, pluginDescriptor, getClass().getClassLoader());
+ }
+
private void initialize() {
plugins = new HashMap<>();
pluginClassLoaders = new HashMap<>();
@@ -765,13 +772,15 @@ public class DefaultPluginManager implements PluginManager {
// load plugin
log.debug("Loading plugin '{}'", pluginPath);
- PluginLoader pluginLoader = new PluginLoader(this, pluginDescriptor, pluginDirectory, pluginClasspath);
+ PluginClassLoader pluginClassLoader = createPluginClassLoader(pluginDescriptor);
+ log.debug("Created class loader '{}'", pluginClassLoader);
+ PluginLoader pluginLoader = new PluginLoader(pluginDirectory, pluginClassLoader, pluginClasspath);
pluginLoader.load();
log.debug("Loaded plugin '{}'", pluginPath);
// create the plugin wrapper
log.debug("Creating wrapper for plugin '{}'", pluginPath);
- PluginWrapper pluginWrapper = new PluginWrapper(pluginDescriptor, pluginPath, pluginLoader.getPluginClassLoader());
+ PluginWrapper pluginWrapper = new PluginWrapper(pluginDescriptor, pluginPath, pluginClassLoader);
pluginWrapper.setPluginFactory(pluginFactory);
pluginWrapper.setRuntimeMode(getRuntimeMode());
@@ -796,7 +805,6 @@ public class DefaultPluginManager implements PluginManager {
unresolvedPlugins.add(pluginWrapper);
// add plugin class loader to the list with class loaders
- PluginClassLoader pluginClassLoader = pluginLoader.getPluginClassLoader();
pluginClassLoaders.put(pluginId, pluginClassLoader);
return pluginWrapper;
diff --git a/pf4j/src/main/java/ro/fortsoft/pf4j/PluginLoader.java b/pf4j/src/main/java/ro/fortsoft/pf4j/PluginLoader.java
index e1ec26c..e361c6a 100644
--- a/pf4j/src/main/java/ro/fortsoft/pf4j/PluginLoader.java
+++ b/pf4j/src/main/java/ro/fortsoft/pf4j/PluginLoader.java
@@ -12,22 +12,20 @@
*/
package ro.fortsoft.pf4j;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import ro.fortsoft.pf4j.util.DirectoryFileFilter;
+import ro.fortsoft.pf4j.util.JarFileFilter;
+
import java.io.File;
import java.io.FileFilter;
import java.net.MalformedURLException;
import java.util.List;
import java.util.Vector;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import ro.fortsoft.pf4j.util.DirectoryFileFilter;
-import ro.fortsoft.pf4j.util.JarFileFilter;
-
/**
* Load all information needed by a plugin.
- * This means add all jar files from 'lib' directory, 'classes'
- * to classpath.
+ * This means add all jar files from 'lib' directory, 'classes' to classpath.
* It's a class for only the internal use.
*
* @author Decebal Suiu
@@ -44,27 +42,16 @@ class PluginLoader {
private PluginClasspath pluginClasspath;
private PluginClassLoader pluginClassLoader;
- public PluginLoader(PluginManager pluginManager, PluginDescriptor pluginDescriptor, File pluginRepository, PluginClasspath pluginClasspath) {
+ public PluginLoader(File pluginRepository, PluginClassLoader pluginClassLoader, PluginClasspath pluginClasspath) {
this.pluginRepository = pluginRepository;
+ this.pluginClassLoader = pluginClassLoader;
this.pluginClasspath = pluginClasspath;
-
- ClassLoader parent = getClass().getClassLoader();
- pluginClassLoader = new PluginClassLoader(pluginManager, pluginDescriptor, parent);
- log.debug("Created class loader '{}'", pluginClassLoader);
- }
-
- public File getPluginRepository() {
- return pluginRepository;
}
public boolean load() {
return loadClassesAndJars();
}
- public PluginClassLoader getPluginClassLoader() {
- return pluginClassLoader;
- }
-
private boolean loadClassesAndJars() {
return loadClasses() && loadJars();
}