提交 29697efd 编写于 作者: K kohsuke

Plugin is now optional

git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@15898 71c3de6d-444a-0410-be80-ed276b4c234a
上级 03b39802
......@@ -169,11 +169,6 @@ public class ClassicPluginStrategy implements PluginStrategy {
}
public void load(PluginWrapper wrapper) throws IOException {
String className = wrapper.getPluginClass();
if(className ==null) {
throw new IOException("Plugin installation failed. No 'Plugin-Class' entry in the manifest of "+wrapper.getShortName());
}
loadPluginDependencies(wrapper.getDependencies(),
wrapper.getOptionalDependencies());
......@@ -185,19 +180,25 @@ public class ClassicPluginStrategy implements PluginStrategy {
ClassLoader old = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(wrapper.classLoader);
try {
try {
Class clazz = wrapper.classLoader.loadClass(className);
Object o = clazz.newInstance();
if(!(o instanceof Plugin)) {
throw new IOException(className+" doesn't extend from hudson.Plugin");
String className = wrapper.getPluginClass();
if(className==null) {
// use the default dummy instance
wrapper.setPlugin(Plugin.NONE);
} else {
try {
Class clazz = wrapper.classLoader.loadClass(className);
Object o = clazz.newInstance();
if(!(o instanceof Plugin)) {
throw new IOException(className+" doesn't extend from hudson.Plugin");
}
wrapper.setPlugin((Plugin) o);
} catch (ClassNotFoundException e) {
throw new IOException2("Unable to load " + className + " from " + wrapper.getShortName(),e);
} catch (IllegalAccessException e) {
throw new IOException2("Unable to create instance of " + className + " from " + wrapper.getShortName(),e);
} catch (InstantiationException e) {
throw new IOException2("Unable to create instance of " + className + " from " + wrapper.getShortName(),e);
}
wrapper.setPlugin((Plugin) o);
} catch (ClassNotFoundException e) {
throw new IOException2("Unable to load " + className + " from " + wrapper.getShortName(),e);
} catch (IllegalAccessException e) {
throw new IOException2("Unable to create instance of " + className + " from " + wrapper.getShortName(),e);
} catch (InstantiationException e) {
throw new IOException2("Unable to create instance of " + className + " from " + wrapper.getShortName(),e);
}
// initialize plugin
......
......@@ -229,4 +229,12 @@ public abstract class Plugin implements Saveable {
return new XmlFile(Hudson.XSTREAM,
new File(Hudson.getInstance().getRootDir(),wrapper.getShortName()+".xml"));
}
/**
* Dummy instance of {@link Plugin} to be used when a plugin didn't
* supply one on its own.
*
* @since 1.288
*/
public static final Plugin NONE = new Plugin() {};
}
......@@ -31,7 +31,6 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.jar.Manifest;
import java.util.logging.Logger;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册