Dapatkan daftar dependensi maven dari org.apache.maven.project.MavenProject

10

Saya mencoba untuk mendapatkan daftar dependensi dari beberapa artefak pakar menggunakan org.apache.maven.project.MavenProject.

Kode saya seperti ini.

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

Pada dasarnya saya mencoba untuk mendapatkan hasil pohon dependensi yang kembali dengan mvn dependency:treeperintah sebagai daftar secara terprogram.

Contoh untuk artefak:

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

Daftar ketergantungan:

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
sumber
Pertanyaan serupa dijawab oleh Tunaki di stackoverflow.com/questions/39638138/…
Nikhil Zurunge
@NikhilZurunge Tapi di sini saya tidak ingin membuat proyek pakar dengan membuat file pom. Saya ingin menggunakanorg.apache.maven.project.MavenProject
Pramodya Mendis
Informasi hanya tersedia selama pembuatan pakar yang berarti dalam konteks plugin pakar. Jika Anda hanya membaca file pom Anda tidak memiliki informasi tersebut .... Tidak ada resolusi dependensiManajemen (jika Anda menggunakannya) dll.
khmarbaise
Saya ingin tahu apakah ada metode atau kelas java untuk menyelesaikan dependensi dari MavenProjectobjek
Pramodya Mendis

Jawaban:

1

Anda dapat menggunakan metode kelas public Set<Artifact> getArtifacts()Anda MavenProjectyang mengembalikan satu set artefak yang mewakili semua dependensi yang dimiliki proyek, termasuk yang transitif.

NB: Konten diisi dengan malas, jadi tergantung pada fase apa yang menjalankan dependensi di beberapa lingkup tidak akan disertakan. misalnya. jika hanya fase kompilasi yang berjalan, dependensi dengan cakupan tes tidak akan dimasukkan.

Semua informasi berasal dari dokumentasi yang dapat Anda temukan di sini .

rakwaht
sumber
2
Saya kira Anda berasumsi bahwa kode harus dijalankan selama build Maven (sebagai plugin Maven), tetapi OP ingin menjalankannya di luar menjalankan Maven.
JF Meier
@ JFMeier ya, Anda benar. Sepertinya saya tidak punya solusi untuk kasus penggunaan ini: /
Pramodya Mendis