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;