Liste der Maven-Abhängigkeiten von org.apache.maven.project.MavenProject abrufen

10

Ich versuche, eine Liste der Abhängigkeiten einiger Maven-Artefakte mit zu erhalten org.apache.maven.project.MavenProject.

Mein Code ist so.

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

Grundsätzlich versuche ich, die Ergebnisse des Abhängigkeitsbaums zu erhalten, die mvn dependency:treeprogrammgesteuert als Befehl als Liste zurückgegeben werden.

Beispiel Für die Artefakte:

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

Abhängigkeitsliste:

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
quelle
Die ähnliche Frage wird von Tunaki unter stackoverflow.com/questions/39638138/…
Nikhil Zurunge
@NikhilZurunge Aber hier möchte ich kein Maven-Projekt erstellen, indem ich eine POM-Datei erstelle. Ich möchte verwendenorg.apache.maven.project.MavenProject
Pramodya Mendis
Die Informationen sind nur während eines Maven-Builds verfügbar, dh im Kontext eines Maven-Plugins. Wenn Sie einfach die POM-Datei lesen, haben Sie diese Informationen nicht ... Es gibt keine Auflösung von DependencyManagement (wenn Sie es verwenden) usw.
khmarbaise
Ich möchte wissen, MavenProject
ob

Antworten:

1

Sie können die Methode public Set<Artifact> getArtifacts()Ihrer MavenProjectKlasse verwenden, die eine Reihe von Artefakten zurückgibt, die alle Abhängigkeiten des Projekts darstellen, einschließlich der transitiven.

NB: Der Inhalt ist träge ausgefüllt. Je nachdem, in welchen Phasen Abhängigkeiten ausgeführt wurden, werden Abhängigkeiten in einigen Bereichen nicht berücksichtigt. z.B. Wenn nur die Kompilierungsphase ausgeführt wurde, werden Abhängigkeiten mit Bereichstest nicht berücksichtigt.

Alle Informationen stammen aus der Dokumentation, die Sie hier finden .

Rakwaht
quelle
2
Ich nehme an, Sie gehen davon aus, dass der Code während eines Maven-Builds (als Maven-Plugin) ausgeführt werden sollte, aber das OP möchte ihn außerhalb eines Maven-Laufs ausführen.
JF Meier
@JFMeier ja, du hast recht. Ich habe
anscheinend