Obter lista de dependências maven de org.apache.maven.project.MavenProject

10

Estou tentando obter uma lista de dependências de alguns artefatos maven usando org.apache.maven.project.MavenProject.

Meu código é assim.

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

Basicamente, estou tentando obter os resultados da árvore de dependência que retornam por mvn dependency:treecomando como uma lista por meio de programação.

Exemplo Para os artefatos:

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

Lista de dependências:

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
fonte
A pergunta semelhante é respondida por Tunaki em stackoverflow.com/questions/39638138/…
Nikhil Zurunge
@NikhilZurunge Mas aqui eu não quero criar um projeto maven criando um arquivo pom. Eu quero usarorg.apache.maven.project.MavenProject
Pramodya Mendis 11/03
As informações estão disponíveis apenas durante uma compilação do maven, o que significa no contexto de um plug-in do maven. Se você simplesmente lê o arquivo pom, não possui essas informações .... Não há resolução de dependencyManagement (se você usá-lo) etc.
khmarbaise
Eu quero saber se existe algum método ou classe java para resolver dependências do MavenProjectobjeto
Pramodya Mendis

Respostas:

1

Você pode usar o método public Set<Artifact> getArtifacts()da sua MavenProjectclasse que retorna um conjunto de artefatos que representam todas as dependências que o projeto possui, incluindo transitivas.

NB: O conteúdo é preenchido lentamente, portanto, dependendo de quais fases foram executadas, dependências em alguns escopos não serão incluídas. por exemplo. se apenas a fase de compilação tiver sido executada, as dependências com o teste de escopo não serão incluídas.

Todas as informações são provenientes da documentação que você pode encontrar aqui .

rakwaht
fonte
2
Acho que você supõe que o código deve ser executado durante uma compilação do Maven (como um plug-in do Maven), mas o OP deseja executá-lo fora de uma execução do Maven.
JF Meier
@JFMeier sim, você está certo. Parece que não tenho uma solução para este caso de uso: /
Pramodya Mendis