Obtenga una lista de dependencias de maven org.apache.maven.project.MavenProject

10

Estoy tratando de obtener una lista de dependencias de algunos artefactos maven usando org.apache.maven.project.MavenProject.

Mi código es así

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

Básicamente estoy tratando de obtener los resultados del árbol de dependencias que regresan por mvn dependency:treecomando como una lista mediante programación.

Ejemplo para los artefactos:

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

Lista de dependencias:

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
fuente
Tunaki responde a una pregunta similar en stackoverflow.com/questions/39638138/…
Nikhil Zurunge
@NikhilZurunge Pero aquí no quiero crear un proyecto maven creando un archivo pom. Quiero usarorg.apache.maven.project.MavenProject
Pramodya Mendis
La información solo está disponible durante una compilación maven, lo que significa en el contexto de un complemento maven. Si simplemente lee el archivo pom, no tiene esa información ... No hay una resolución de
gestión
Quiero saber si hay algún método o clase de Java para resolver las dependencias del MavenProjectobjeto
Pramodya Mendis

Respuestas:

1

Puede usar el método public Set<Artifact> getArtifacts()de su MavenProjectclase que devuelve un conjunto de artefactos que representan todas las dependencias que tiene el proyecto, incluidas las transitivas.

NB: los contenidos están perezosamente poblados, por lo que dependiendo de qué fases se hayan ejecutado las dependencias en algunos ámbitos no se incluirán. p.ej. Si solo se ha ejecutado la fase de compilación, no se incluirán las dependencias con prueba de alcance.

Toda la información proviene de la documentación que puede encontrar aquí .

rakwaht
fuente
2
Supongo que asume que el código debería ejecutarse durante una compilación de Maven (como un complemento de Maven), pero el OP quiere ejecutarlo fuera de una ejecución de Maven.
JF Meier
@JFMeier sí, tienes razón. Parece que no tengo una solución para este caso de uso: /
Pramodya Mendis