Obtenir la liste des dépendances maven de org.apache.maven.project.MavenProject

10

J'essaie d'obtenir une liste des dépendances de certains artefacts maven à l'aide org.apache.maven.project.MavenProject.

Mon code est comme ça.

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

Fondamentalement, j'essaie d'obtenir les résultats de l'arbre de dépendance qui retourne par mvn dependency:treecommande sous forme de liste par programme.

Exemple Pour les artefacts:

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

Liste des dépendances:

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
la source
Tunaki répond à une question similaire sur stackoverflow.com/questions/39638138/…
Nikhil Zurunge
@NikhilZurunge Mais ici, je ne veux pas créer un projet maven en créant un fichier pom. Je veux utiliserorg.apache.maven.project.MavenProject
Pramodya Mendis
Les informations ne sont disponibles que lors d'une construction maven, ce qui signifie dans le contexte d'un plugin maven. Si vous lisez simplement le fichier pom vous n'avez pas ces informations .... Il n'y a pas de résolution de dependencyManagement (si vous l'utilisez) etc.
khmarbaise
Je veux savoir s'il existe une méthode ou une classe java pour résoudre les dépendances de l' MavenProjectobjet
Pramodya Mendis

Réponses:

1

Vous pouvez utiliser la méthode public Set<Artifact> getArtifacts()de votre MavenProjectclasse qui renvoie un ensemble d'artefacts représentant toutes les dépendances du projet, y compris les transitives.

NB: Le contenu est rempli paresseusement, donc selon les phases qui ont exécuté les dépendances dans certaines étendues ne seront pas incluses. par exemple. si seule la phase de compilation s'est exécutée, les dépendances avec le test de portée ne seront pas incluses.

Toutes les informations proviennent de la documentation que vous pouvez trouver ici .

rakwaht
la source
2
Je suppose que vous supposez que le code devrait s'exécuter pendant une construction Maven (en tant que plugin Maven), mais l'OP veut l'exécuter en dehors d'une exécution Maven.
JF Meier
@JFMeier oui, vous avez raison. Semble que je n'ai pas de solution pour ce cas d'utilisation: /
Pramodya Mendis