Fix plugin load order

The old algorithm failed, because the tree below lead to the issue, that
the scm-branchwp-plugin was loaded before the scm-review-plugin was
ready.

This commit changes the order in the way, that leafs are loaded last.

+- scm-editor-plugin d
   +- scm-branchwp-plugin a
+- scm-mail-plugin c
   +- scm-review-plugin b
      +- scm-branchwp-plugin a
   +- scm-branchwp-plugin a
This commit is contained in:
Rene Pfeuffer
2020-01-16 08:56:57 +01:00
parent 53403f26e2
commit 2d755aae9a
3 changed files with 83 additions and 64 deletions

View File

@@ -191,11 +191,11 @@ public final class PluginProcessor
logger.info("install plugin tree:\n{}", pluginTree);
List<PluginNode> rootNodes = pluginTree.getRootNodes();
List<PluginNode> leafLastNodes = pluginTree.getLeafLastNodes();
logger.trace("create plugin wrappers and build classloaders");
Set<InstalledPlugin> wrappers = createPluginWrappers(classLoader, rootNodes);
Set<InstalledPlugin> wrappers = createPluginWrappers(classLoader, leafLastNodes);
logger.debug("collected {} plugins", wrappers.size());
@@ -259,33 +259,6 @@ public final class PluginProcessor
}
}
/**
* Method description
*
*
* @param plugins
* @param classLoader
* @param nodes
*
* @throws IOException
*/
private void appendPluginWrappers(Set<InstalledPlugin> plugins,
ClassLoader classLoader, List<PluginNode> nodes)
throws IOException
{
// TODO fix plugin loading order
for (PluginNode node : nodes)
{
appendPluginWrapper(plugins, classLoader, node);
}
for (PluginNode node : nodes)
{
appendPluginWrappers(plugins, classLoader, node.getChildren());
}
}
/**
* Method description
*
@@ -484,19 +457,22 @@ public final class PluginProcessor
*
*
* @param classLoader
* @param rootNodes
* @param nodes
*
* @return
*
* @throws IOException
*/
private Set<InstalledPlugin> createPluginWrappers(ClassLoader classLoader,
List<PluginNode> rootNodes)
List<PluginNode> nodes)
throws IOException
{
Set<InstalledPlugin> plugins = Sets.newHashSet();
appendPluginWrappers(plugins, classLoader, rootNodes);
for (PluginNode node : nodes)
{
appendPluginWrapper(plugins, classLoader, node);
}
return plugins;
}