Программно получить граф зависимостей Maven

Учитывая артефакт Maven (groupId:artifactId:version), как я могу программно запрашивать его зависимости? (На самом деле мне не нужно извлекать какие-либо артефакты, только информацию о зависимости.)

Изменить, чтобы добавить Я хочу сделать это вне подключаемого модуля Maven и построить график зависимостей.


person Matt R    schedule 25.06.2012    source источник


Ответы (3)


Если вы используете плагин maven (т.е. расширяете AbstractMojo), вы можете сделать следующее:

  /**
   * @parameter expression="${project}"
   */
  private org.apache.maven.project.MavenProject mavenProject;

  List<org.apache.maven.model.Dependency> depmgtdeps = mavenProject.getDependencyManagement().getDependencies();

Это даст вам фактические объекты зависимостей, которые он обнаруживает. Класс MavenProject также имеет множество других методов для чтения различных вещей, связанных с pom. Однако я не верю, что это работает вне плагина, или, по крайней мере, я никогда не пытался это сделать.

person Michael    schedule 25.06.2012
comment
Спасибо - на самом деле это не для плагина Maven, а для отдельного приложения. Возможно, есть другой способ заполучить MavenProject... - person Matt R; 25.06.2012
comment
Я не уверен, что есть. Есть конструктор, который принимает модель, но на самом деле у вас нет хорошего способа получить один из них. Можете ли вы предоставить больше информации о том, чего вы пытаетесь достичь здесь? Может быть, это другой способ сделать то, что вы хотите. - person Michael; 25.06.2012
comment
Я хочу построить графы зависимостей различных артефактов Maven, чтобы протестировать алгоритм компоновки графа. - person Matt R; 25.06.2012


Следующий отличный сценарий использует ivy для разрешения зависимостей.

import groovy.xml.NamespaceBuilder

// Main program
// ============
def ant = new AntBuilder()
def ivy = NamespaceBuilder.newInstance(ant, "antlib:org.apache.ivy.ant")

ivy.resolve(
    inline:true,
    keep:true,
    conf:"default",
    organisation:"org.springframework",
    module:"spring-core",
    revision:"3.1.1.RELEASE",
)

ivy.report(toDir:"reports")

Создает отчет в формате HTML и файл graphml:

|-- report.groovy
|-- reports
|   |-- ivy-report.css
|   |-- org.springframework-spring-core-caller-default.graphml
|   `-- org.springframework-spring-core-caller-default.html
person Mark O'Connor    schedule 25.06.2012