diff --git a/core/src/main/java/hudson/PluginManager.java b/core/src/main/java/hudson/PluginManager.java index 5340b1d4a1..2052160caa 100644 --- a/core/src/main/java/hudson/PluginManager.java +++ b/core/src/main/java/hudson/PluginManager.java @@ -158,18 +158,25 @@ public final class PluginManager extends AbstractModelObject { activePlugins.remove(p); plugins.remove(p); } + } - for (PluginWrapper p : activePlugins.toArray(new PluginWrapper[activePlugins.size()])) { - strategy.initializeComponents(p); + /** + * Called immediately after the construction. + * This is a separate method so that code executed from here will see a valid value in + * {@link Hudson#pluginManager}. + */ + public void initialize() { + for (PluginWrapper p : activePlugins.toArray(new PluginWrapper[activePlugins.size()])) { + strategy.initializeComponents(p); try { p.getPlugin().postInitialize(); } catch (Exception e) { - failedPlugins.add(new FailedPlugin(p.getShortName(),e)); + failedPlugins.add(new FailedPlugin(p.getShortName(), e)); LOGGER.log(Level.SEVERE, "Failed to post-initialize a plug-in " + p.getShortName(), e); activePlugins.remove(p); plugins.remove(p); } - } + } } /** diff --git a/core/src/main/java/hudson/model/Hudson.java b/core/src/main/java/hudson/model/Hudson.java index 13637eaece..ccd3ddc947 100644 --- a/core/src/main/java/hudson/model/Hudson.java +++ b/core/src/main/java/hudson/model/Hudson.java @@ -514,6 +514,7 @@ public final class Hudson extends Node implements ItemGroup, Stapl // load plugins. pluginManager = new PluginManager(context); + pluginManager.initialize(); // if we are loading old data that doesn't have this field if(slaves==null) slaves = new NodeList();