ProjectDependencyResolver does what I expect for provided dependencies [1].
With DefaultDependencyCollector, provided-scope dependencies of the root node are not picked up, because the root node itself is a dependency (with a scope), making the provided-scope dependencies transitive ones. With ProjectDependencyResolver, the root node is not a dependency. It does not have a scope. Therefore provided-scope dependencies below the root are direct dependencies. Added a image to show the comparison [2]. Case closed. [1]: https://github.com/suztomo/maven-provided-scope/blob/master/src/test/java/suztomo/TestProjectDependencyResolver.java#L136 [2]: https://github.com/suztomo/maven-provided-scope#comparison-between-defaultdependencycollector-and-projectdependencyresolver On Mon, Feb 10, 2020 at 3:05 PM Tomo Suzuki <suzt...@google.com> wrote: > > I created a test case to demonstrate this behavior: > https://github.com/suztomo/maven-provided-scope/blob/master/src/test/java/suztomo/AppTest.java#L72 > > On Fri, Feb 7, 2020 at 5:36 PM Tomo Suzuki <suzt...@google.com> wrote: > > > > Hi Maven developers, > > > > I find DefaultDependencyCollector is not getting "direct" and > > "provided" dependencies by default. Is this expected behavior? > > > > Background: > > We use maven-resolver in our Java code. We create > > RepositorySystemSesison through MavenRepositorySystemUtils.newSession > > [1]. We use the session and DefaultDependencyCollector through > > RepositorySystem.collectDependencies [2] to get the dependency graph > > of a Maven artifact. > > > > Problem: > > The dependency graph from RepositorySystem.collectDependencies does > > not have direct provided dependencies. I expect provided dependencies > > should be included in the graph when they are direct dependencies. > > > > Analysis: > > - MavenRepositorySystemUtils.newSession [3] creates > > ScopedDependencySelector("test", "provided") > > - ScopeDependencySelector.deriveChildSelector [4] creates clone of > > itself with transitive=true. When transitive=true, it does not select > > "provided" dependency. > > - DefaultDependencyCollector.collectDependencies [5] always call > > deriveChildSelector before using the selector from the session. > > - Therefore, ScopeDependencySelector always has transitive=true ( to > > exclude provided dependencies) when it's used with > > DefaultDependencyCollector. > > > > [1]: > > https://github.com/GoogleCloudPlatform/cloud-opensource-java/blob/50da79355e042c5ff14ec72230cc6edbddcf8436/dependencies/src/main/java/com/google/cloud/tools/opensource/dependencies/RepositoryUtility.java#L112 > > [2]: > > https://github.com/GoogleCloudPlatform/cloud-opensource-java/blob/50da79355e042c5ff14ec72230cc6edbddcf8436/dependencies/src/main/java/com/google/cloud/tools/opensource/dependencies/DependencyGraphBuilder.java#L179 > > [3]: > > https://github.com/apache/maven/blob/master/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/MavenRepositorySystemUtils.java#L102 > > [4]: > > https://github.com/apache/maven-resolver/blob/47edcfe69c4e52ced4cb93d65b7348b5645cdd68/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/selector/ScopeDependencySelector.java#L119 > > [5]: > > https://github.com/apache/maven-resolver/blob/18dd2b5cde851256a9f44db25097efee0691d6b4/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/DefaultDependencyCollector.java#L255 > > > > -- > > Regards, > > Tomo > > > > -- > Regards, > Tomo -- Regards, Tomo --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org For additional commands, e-mail: dev-h...@maven.apache.org