Uzyskaj listę zależności maven dla org.apache.maven.project.MavenProject

10

Próbuję uzyskać listę zależności przy użyciu niektórych artefaktów raju org.apache.maven.project.MavenProject.

Mój kod jest taki.

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);
}

Zasadniczo próbuję uzyskać wyniki drzewa zależności, które mvn dependency:treeprogramowo zwraca komendę jako listę.

Przykład artefaktów:

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

Lista zależności:

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
źródło
Odpowiedzi na podobne pytanie udziela Tunaki na stackoverflow.com/questions/39638138/...
Nikhil Zurunge
@NikhilZurunge Ale tutaj nie chcę tworzyć projektu maven, tworząc plik pom. Chcę użyćorg.apache.maven.project.MavenProject
Pramodya Mendis
Informacje są dostępne tylko podczas kompilacji maven, co oznacza w kontekście wtyczki maven. Jeśli po prostu czytasz plik pom, nie masz tych informacji ... Nie ma rozwiązania dependenceManagement (jeśli go używasz) itp.
Khmarbaise
Chcę wiedzieć, czy jest jakaś metoda lub klasa Java do rozwiązywania zależności od MavenProjectobiektu
Pramodya Mendis

Odpowiedzi:

1

Możesz użyć metody public Set<Artifact> getArtifacts()swojej MavenProjectklasy, która zwraca zestaw artefaktów reprezentujących wszystkie zależności projektu, w tym przechodnie.

Uwaga: zawartość jest leniwie zapełniana, więc w zależności od tego, jakie fazy mają przebieg uruchamiania, w niektórych zakresach nie zostaną uwzględnione. na przykład. jeśli uruchomiona została tylko faza kompilacji, nie zostaną uwzględnione zależności z testem zasięgu.

Wszystkie informacje pochodzą z dokumentacji, którą można znaleźć tutaj .

rakwaht
źródło
2
Myślę, że zakładasz, że kod powinien działać podczas kompilacji Maven (jako wtyczka Maven), ale OP chce uruchomić go poza uruchomieniem Maven.
JF Meier
@JFMeier tak, masz rację. Wygląda na to, że nie mam rozwiązania dla tego przypadku użycia: /
Pramodya Mendis