diff --git a/independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/maven/ApplicationDependencyResolver.java b/independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/maven/ApplicationDependencyResolver.java index 153b1307233b5..7a9ef21ff6631 100644 --- a/independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/maven/ApplicationDependencyResolver.java +++ b/independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/maven/ApplicationDependencyResolver.java @@ -29,6 +29,7 @@ import org.eclipse.aether.artifact.Artifact; import org.eclipse.aether.artifact.DefaultArtifact; import org.eclipse.aether.collection.CollectRequest; +import org.eclipse.aether.collection.DependencyCollectionContext; import org.eclipse.aether.collection.DependencyCollectionException; import org.eclipse.aether.collection.DependencySelector; import org.eclipse.aether.graph.DefaultDependencyNode; @@ -40,7 +41,9 @@ import org.eclipse.aether.resolution.ArtifactRequest; import org.eclipse.aether.resolution.ArtifactResolutionException; import org.eclipse.aether.util.artifact.JavaScopes; +import org.eclipse.aether.util.graph.selector.AndDependencySelector; import org.eclipse.aether.util.graph.selector.ExclusionDependencySelector; +import org.eclipse.aether.util.graph.selector.ScopeDependencySelector; import org.jboss.logging.Logger; import io.quarkus.bootstrap.BootstrapConstants; @@ -522,11 +525,31 @@ private DependencyNode resolveRuntimeDeps(CollectRequest request) } } + public static final class StrictNoOptionalDependencySelector implements DependencySelector { + + @Override + public boolean selectDependency(Dependency dependency) { + return !dependency.isOptional(); + } + + @Override + public DependencySelector deriveChildSelector(DependencyCollectionContext context) { + return this; + } + } + private DefaultRepositorySystemSession getSessionWithDirectDepsCollector() { final RepositorySystemSession session = resolver.getSession(); final DefaultRepositorySystemSession mutableSession = new DefaultRepositorySystemSession(session); + // override session defined in + DependencySelector depFilter = new AndDependencySelector( + new ScopeDependencySelector("test", "provided"), + new StrictNoOptionalDependencySelector(), + new ExclusionDependencySelector()); + // mutableSession.setDependencySelector( + // new DirectDependencyCollectorFactory(session.getDependencySelector(), dependencyMap)); mutableSession.setDependencySelector( - new DirectDependencyCollectorFactory(session.getDependencySelector(), dependencyMap)); + new DirectDependencyCollectorFactory(depFilter, dependencyMap)); return mutableSession; }