diff --git a/changelog.html b/changelog.html index 418ba51f10f608e4da5b858af5188c0ab9f49d5c..6bfca2291f765119e2a18579d1c6fe1af3c11707 100644 --- a/changelog.html +++ b/changelog.html @@ -70,6 +70,12 @@ Upcoming changes
  • Some CLI command are not available. (issue 10418) +
  • + Maven jobs deploying or installing artifacts should be used for dependency graph instead of jobs which don't + (issue 10366) +
  • + Maven jobs which are disabled should be excluded from dependency graph + (issue 10367) diff --git a/maven-plugin/src/main/java/hudson/maven/MavenModule.java b/maven-plugin/src/main/java/hudson/maven/MavenModule.java index 00239ea90dd5945c6bc7326ae55f8c1a62c4cfdf..c8731ddfc8f3bc1239fc6cf51bf824646635100f 100644 --- a/maven-plugin/src/main/java/hudson/maven/MavenModule.java +++ b/maven-plugin/src/main/java/hudson/maven/MavenModule.java @@ -40,6 +40,8 @@ import org.kohsuke.stapler.StaplerRequest; import org.kohsuke.stapler.StaplerResponse; import org.kohsuke.stapler.export.Exported; +import com.google.common.util.concurrent.MoreExecutors; + import javax.servlet.ServletException; import java.io.IOException; import java.util.ArrayList; @@ -387,7 +389,7 @@ public final class MavenModule extends AbstractMavenProject modules = new HashMap(); for (MavenModule m : Jenkins.getInstance().getAllItems(MavenModule.class)) { - if(m.isDisabled()) continue; + if(!m.isBuildable()) continue; ModuleDependency moduleDependency = m.asDependency(); - modules.put(moduleDependency,m); + MavenModule old = modules.get(moduleDependency); + MavenModule relevant = chooseMoreRelevantModule(old, m, moduleDependency); + modules.put(moduleDependency, relevant); if (hasDependenciesWithUnknownVersion) { - modules.put(moduleDependency.withUnknownVersion(),m); + modules.put(moduleDependency.withUnknownVersion(),relevant); } } data = new MavenDependencyComputationData(modules); @@ -477,6 +481,67 @@ public final class MavenModule extends AbstractMavenProject relevancy2) { + moreRelevant = mm1; + lessRelevant = mm2; + } else if (relevancy2 > relevancy1) { + moreRelevant = mm2; + lessRelevant = mm1; + } else { + // arbitrary, but reproduceable + if (mm1.getParent().getName().compareTo(mm2.getParent().getName()) < 0) { + moreRelevant = mm2; + lessRelevant = mm1; + } else { // should always mean > 0 as name is unique + moreRelevant = mm1; + lessRelevant = mm2; + } + } + + if (LOGGER.isLoggable(Level.FINER)) { + LOGGER.finer("Choosing " + moreRelevant.getParent().getName() + " over " + lessRelevant.getParent().getName() + + " for module " + moduleDependency.getName() + ". Relevancies: " + relevancy1 + ", " + relevancy2); + } + return moreRelevant; + } + + private int getDependencyRelevancy(MavenModule mm) { + + int relevancy = 0; + + for (String goal : Util.tokenize(mm.getGoals())) { + if ("deploy".equals(goal) || "deploy:deploy".equals(goal)) { + return 2; + } + + if ("install".equals(goal)) { + relevancy = 1; + } + } + + for (Publisher publisher : mm.getParent().getPublishers()) { + if (publisher instanceof RedeployPublisher) { + return 2; + } + } + + return relevancy; + } private static class MavenDependencyComputationData { boolean withUnknownVersions = false;