diff --git a/core/src/main/java/hudson/ClassicPluginStrategy.java b/core/src/main/java/hudson/ClassicPluginStrategy.java index 00171687008109d9c2efc129e6960d42a881ccbf..437579869106bb534fa23c69f116c380a746a767 100644 --- a/core/src/main/java/hudson/ClassicPluginStrategy.java +++ b/core/src/main/java/hudson/ClassicPluginStrategy.java @@ -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 diff --git a/core/src/main/java/hudson/Plugin.java b/core/src/main/java/hudson/Plugin.java index fb0cbd48cef6ab9169ab45049680ee060ed5f9dd..c281fe947749505fd9d9e04a9a5cc4ba19e2513a 100644 --- a/core/src/main/java/hudson/Plugin.java +++ b/core/src/main/java/hudson/Plugin.java @@ -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() {}; } diff --git a/core/src/main/java/hudson/PluginWrapper.java b/core/src/main/java/hudson/PluginWrapper.java index 6e3274ccb29af98ac4d569dad549368bb6709140..6e45587c3f02b5135ba38d0b3ef685c7b1c17e13 100644 --- a/core/src/main/java/hudson/PluginWrapper.java +++ b/core/src/main/java/hudson/PluginWrapper.java @@ -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;