mirror of
https://github.com/jenkinsci/jenkins.git
synced 2026-11-04 15:45:52 +00:00
made the generated classes visible to the classloader.
git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@36008 71c3de6d-444a-0410-be80-ed276b4c234a
This commit is contained in:
1 parent
cfd817d21e
commit
be5ab5490b
3 files changed
+35
-3
No files matched your search
@@ -59,6 +59,7 @@ import javax.servlet.ServletContext;
|
||||
import javax.servlet.ServletException;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.net.URL;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
@@ -70,6 +71,8 @@ import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.Map;
|
||||
import java.util.HashMap;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ConcurrentMap;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@@ -580,13 +583,30 @@ public abstract class PluginManager extends AbstractModelObject {
|
||||
/**
|
||||
* {@link ClassLoader} that can see all plugins.
|
||||
*/
|
||||
private final class UberClassLoader extends ClassLoader {
|
||||
public final class UberClassLoader extends ClassLoader {
|
||||
/**
|
||||
* Make generated types visible.
|
||||
* Keyed by the generated class name.
|
||||
*/
|
||||
private ConcurrentMap<String, WeakReference<Class>> generatedClasses = new ConcurrentHashMap<String, WeakReference<Class>>();
|
||||
|
||||
public UberClassLoader() {
|
||||
super(PluginManager.class.getClassLoader());
|
||||
}
|
||||
|
||||
public void addNamedClass(String className, Class c) {
|
||||
generatedClasses.put(className,new WeakReference<Class>(c));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Class<?> findClass(String name) throws ClassNotFoundException {
|
||||
WeakReference<Class> wc = generatedClasses.get(name);
|
||||
if (wc!=null) {
|
||||
Class c = wc.get();
|
||||
if (c!=null) return c;
|
||||
else generatedClasses.remove(name,wc);
|
||||
}
|
||||
|
||||
// first, use the context classloader so that plugins that are loading
|
||||
// can use its own classloader first.
|
||||
ClassLoader cl = Thread.currentThread().getContextClassLoader();
|
||||
|
||||
Reference in new issue
Block a user