diff --git a/core/src/main/java/hudson/PluginWrapper.java b/core/src/main/java/hudson/PluginWrapper.java index 870930f7def60c0202d461eb4b42065b8a3de71a..71370d4cdd24751023ac9ca60dbf7f897cadb4b9 100644 --- a/core/src/main/java/hudson/PluginWrapper.java +++ b/core/src/main/java/hudson/PluginWrapper.java @@ -479,19 +479,33 @@ public class PluginWrapper implements Comparable, ModelObject { */ /*package*/ void resolvePluginDependencies() throws IOException { List missingDependencies = new ArrayList(); + List incompatibleDependencies = new ArrayList(); // make sure dependencies exist for (Dependency d : dependencies) { - if (parent.getPlugin(d.shortName) == null) + PluginWrapper plugin = parent.getPlugin(d.shortName); + if (plugin == null || plugin.isActive()) { missingDependencies.add(d.toString()); + } else if (new VersionNumber(plugin.getVersion()).isOlderThan(new VersionNumber(d.version))) { + incompatibleDependencies.add(d.toString()); + } } - if (!missingDependencies.isEmpty()) - throw new IOException("Dependency "+Util.join(missingDependencies, ", ")+" doesn't exist"); // add the optional dependencies that exists for (Dependency d : optionalDependencies) { - if (parent.getPlugin(d.shortName) != null) + PluginWrapper plugin = parent.getPlugin(d.shortName); + if (plugin != null) { dependencies.add(d); + } else if (new VersionNumber(plugin.getVersion()).isOlderThan(new VersionNumber(d.version))) { + incompatibleDependencies.add(d.toString()); + } } + + if (!missingDependencies.isEmpty()) + throw new IOException("Dependency "+Util.join(missingDependencies, ", ")+" doesn't exist"); + + if (!incompatibleDependencies.isEmpty()) + throw new IOException("Dependency "+Util.join(incompatibleDependencies, ", ")+" doesn't match required version"); + } /**