akula1001
akula1001

Reputation: 4636

How to get all maven dependencies using aether?

I'm trying to fetch a maven artifact's dependencies using aether. I see a RepositorySystem.collectDependencies(), but that fetches only compile and runtime scoped dependencies. How do I fetch all dependencies for the artifact, including test and provided?

Upvotes: 4

Views: 4007

Answers (5)

user5692355
user5692355

Reputation:

Take a look at this github project: https://github.com/Gemba/mvn-dd
It downloads all dependencies including test and provided.
It uses aether's library to fetch them.

Upvotes: 1

Ivar Refsdal
Ivar Refsdal

Reputation: 85

Assuming you are using DefaultRepositorySystemSession you may do the following:

defaultRepositorySystemSession.setDependencySelector(new DependencySelector() {
    @Override
    public boolean selectDependency(Dependency dependency) {
        return true;
    }

    @Override
    public DependencySelector deriveChildSelector(DependencyCollectionContext context) {
        return this;
    }
});

and then

CollectResult result = repositorySystem.collectDependencies(defaultRepositorySystemSession, request);

Here is an example project that does this.

Upvotes: 2

Andrey Chaschev
Andrey Chaschev

Reputation: 16476

You can utilize DependencyFilter in Eclipses Aether. A complete version for a sample below can be found in this awesome set of Aether snippets.

DependencyFilter classpathFilter = DependencyFilterUtils.classpathFilter(JavaScopes.COMPILE, JavaScopes.PROVIDED);

CollectRequest collectRequest = new CollectRequest();
collectRequest.setRoot( new Dependency( artifact, JavaScopes.COMPILE ) );
collectRequest.setRepositories(repositories);

DependencyRequest dependencyRequest = new DependencyRequest( collectRequest, classpathFilter );

List<ArtifactResult> artifactResults =
    system.resolveDependencies( session, dependencyRequest ).getArtifactResults();

UPDATE

Version 0.9.0M3 is not compatible with Maven 3.1.0, so don't use it inside Maven, i.e. in a plugin.

Upvotes: 1

Ring
Ring

Reputation: 2309

These three files:

https://github.com/terraframe/Runway-SDK/tree/v1.8.0/runwaysdk-server/src/main/java/com/runwaysdk/business/generation/maven

Are a working, stand-alone, example using Aether.

It worked for a few months then I all of a sudden had an issue pop up where it would sometimes on Mac JRE throw a DependencyResolutionException on com.sun:tools.jar.

Good luck, if you decide to use it, I'm instead going to use maven-dependency-plugin dependency:build-classpath.

Upvotes: 1

yegor256
yegor256

Reputation: 105053

Take a look at jcabi-aether (I'm a developer), which is a wrapper around Sonatype Aether:

File repo = this.session.getLocalRepository().getBasedir();
Collection<Artifact> deps = new Aether(this.getProject(), repo).resolve(
  new DefaultArtifact("junit", "junit-dep", "", "jar", "4.10"),
  JavaScopes.RUNTIME
);

Upvotes: 3

Related Questions