10

I'm trying to get a list of dependencies of some maven artifacts using org.apache.maven.project.MavenProject.

My code is like this.

public List<Dependencies> loadProject() {
    Model mavenModel = new Model();
    mavenModel.setModelVersion("4.0.0");
    mavenModel.setGroupId("org");
    mavenModel.setArtifactId("wso2");
    mavenModel.setVersion("1.0.0");

    addDependency(mavenModel, "com.google.inject", "guice", "4.2.2");
    addDependency(mavenModel, "ch.qos.logback", "logback-classic", "1.2.3");

    MavenProject mavenProject = new MavenProject(mavenModel);

    //******* Need to resolve dependencies of `mavenProject` and *******
    //******* get the list of dependencies of this project.    *******

    return dependencies;
}

private static void addDependency(Model mavenModel, String groupId, String artifactId, String version) {


Dependency dependency = new Dependency();
    dependency.setGroupId(groupId);
    dependency.setArtifactId(artifactId);
    dependency.setVersion(version);
    mavenModel.addDependency(dependency);
}

Basically I'm trying to get the dependency tree results which returns by mvn dependency:tree command as a list by programmatically.

Example For the artifacts:

  • com.google.inject:guide:4.2.2
  • ch.qos.logback:logback-classic:1.2.3

Dependency list:

List = [
com.google.inject:guice:jar:4.2.2:compile,
javax.inject:javax.inject:jar:1:compile,
aopalliance:aopalliance:jar:1.0:compile,
com.google.guava:guava:jar:25.1-android:compile,
com.google.code.findbugs:jsr305:jar:3.0.2:compile,
org.checkerframework:checker-compat-qual:jar:2.0.0:compile,
com.google.errorprone:error_prone_annotations:jar:2.1.3:compile,
com.google.j2objc:j2objc-annotations:jar:1.1:compile,
org.codehaus.mojo:animal-sniffer-annotations:jar:1.14:compile,
ch.qos.logback:logback-classic:jar:1.2.3:compile,
ch.qos.logback:logback-core:jar:1.2.3:compile,
org.slf4j:slf4j-api:jar:1.7.25:compile
]
Pramodya Mendis
  • 686
  • 8
  • 24
  • The similar question is answered by Tunaki at https://stackoverflow.com/questions/39638138/find-all-direct-dependencies-of-an-artifact-on-maven-central – Nikhil Zurunge Mar 11 '20 at 12:13
  • @NikhilZurunge But here I do not want to create a maven project by creating a pom file. I want to use `org.apache.maven.project.MavenProject` – Pramodya Mendis Mar 11 '20 at 12:15
  • The information are only available during a maven build which means in the context of a maven plugin. If you simply read the pom file you don't have those informations....There is no resolution of dependencyManagement (if you use it) etc. – khmarbaise Mar 11 '20 at 18:26
  • I want to know is there any java method or class to resolve dependencies from `MavenProject` object – Pramodya Mendis Mar 12 '20 at 06:40

1 Answers1

1

You can use the method public Set<Artifact> getArtifacts() of your MavenProject class which returns a set of artifacts representing all dependencies that the project has, including transitive ones.

NB: Contents are lazily populated, so depending on what phases have run dependencies in some scopes won't be included. eg. if only compile phase has run, dependencies with scope test won't be included.

All the information are coming from the documentation that you can find here.

rakwaht
  • 3,666
  • 3
  • 28
  • 45