diff --git a/core/src/main/java/hudson/PluginManager.java b/core/src/main/java/hudson/PluginManager.java index 87560b141a..fb427cbe1a 100644 --- a/core/src/main/java/hudson/PluginManager.java +++ b/core/src/main/java/hudson/PluginManager.java @@ -7,6 +7,8 @@ import javax.servlet.ServletContext; import java.io.File; import java.io.FilenameFilter; import java.io.IOException; +import java.io.StringWriter; +import java.io.PrintWriter; import java.net.URL; import java.util.ArrayList; import java.util.Collection; @@ -32,6 +34,8 @@ public final class PluginManager { */ private final List activePlugins = new ArrayList(); + private final List failedPlugins = new ArrayList(); + /** * Plug-in root directory. */ @@ -72,6 +76,7 @@ public final class PluginManager { if(p.isActive()) activePlugins.add(p); } catch (IOException e) { + failedPlugins.add(new FailedPlugin(arc.getName(),e)); LOGGER.log(Level.SEVERE, "Failed to load a plug-in " + arc, e); } } @@ -81,6 +86,10 @@ public final class PluginManager { return plugins; } + public List getFailedPlugins() { + return failedPlugins; + } + public PluginWrapper getPlugin(String shortName) { for (PluginWrapper p : plugins) { if(p.getShortName().equals(shortName)) @@ -153,4 +162,22 @@ public final class PluginManager { private static final Logger LOGGER = Logger.getLogger(PluginManager.class.getName()); + /** + * Remembers why a plugin failed to deploy. + */ + public static final class FailedPlugin { + public final String name; + public final IOException cause; + + public FailedPlugin(String name, IOException cause) { + this.name = name; + this.cause = cause; + } + + public String getExceptionString() { + StringWriter sw = new StringWriter(); + cause.printStackTrace(new PrintWriter(sw)); + return sw.toString(); + } + } } diff --git a/core/src/main/resources/hudson/model/Hudson/managePlugins.jelly b/core/src/main/resources/hudson/model/Hudson/managePlugins.jelly index e46f8615b2..86ab1eb6f6 100644 --- a/core/src/main/resources/hudson/model/Hudson/managePlugins.jelly +++ b/core/src/main/resources/hudson/model/Hudson/managePlugins.jelly @@ -14,7 +14,7 @@ - + No plugins installed. @@ -38,6 +38,17 @@ + + + + +

Failed : ${p.name}

+
+
${p.exceptionString}
+
+ + +