Ottieni l'elenco delle dipendenze di Maven di org.apache.maven.project.MavenProject


10

Sto cercando di ottenere un elenco di dipendenze di alcuni artefatti di maven usando org.apache.maven.project.MavenProject.

Il mio codice è così.

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

Fondamentalmente sto cercando di ottenere i risultati dell'albero delle dipendenze che ritorna da mvn dependency:treecomando come elenco programmaticamente.

Esempio per i manufatti:

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

Elenco delle dipendenze:

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
]

La domanda simile si risponde con Tunaki a stackoverflow.com/questions/39638138/...
Nikhil Zurunge

@NikhilZurunge Ma qui non voglio creare un progetto maven creando un file pom. Voglio usareorg.apache.maven.project.MavenProject
Pramodya Mendis l'

Le informazioni sono disponibili solo durante una build maven, il che significa che nel contesto di un plugin maven. Se leggi semplicemente il file pom non hai queste informazioni .... Non c'è risoluzione di dependencyManagement (se lo usi) ecc.
Khmarbaise,

Voglio sapere c'è qualche metodo o classe java per risolvere le dipendenze MavenProjectdall'oggetto
Pramodya Mendis,

Risposte:


1

Puoi usare il metodo public Set<Artifact> getArtifacts()della tua MavenProjectclasse che restituisce un insieme di artefatti che rappresentano tutte le dipendenze che il progetto ha, comprese quelle transitive.

NB: I contenuti sono pigramente popolati, quindi a seconda di quali fasi sono state eseguite dipendenze in alcuni ambiti non saranno inclusi. per esempio. se è stata eseguita solo la fase di compilazione, le dipendenze con test dell'ambito non verranno incluse.

Tutte le informazioni provengono dalla documentazione che puoi trovare qui .


2
Suppongo che supponiamo che il codice debba essere eseguito durante una compilazione Maven (come plugin Maven), ma l'OP vuole eseguirlo al di fuori di una corsa Maven.
JF Meier,

@JFMeier sì, hai ragione. Sembra che non ho una soluzione per questo caso d'uso: /
Pramodya Mendis il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.