Как я могу получить доступ к Maven Artifact POM с помощью Java API от Maven?

Я пытаюсь получить все дерево зависимостей и их poms, начиная с корня проекта. Я начинаю с POM, уже существующего в моей файловой системе, но я не уверен, как извлечь pom зависимостей из репозитория.

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

FileReader reader = null;
Model model = null;
MavenXpp3Reader mavenreader = new MavenXpp3Reader();

File pomfile = new File("pom.xml");

model.setPomFile(pomfile);
MavenProject project = new MavenProject(model);

List<Dependency> deps = project.getDependencies();

// Get dependency details
for (Dependency d: deps) {          
    System.out.print(d.getArtifactId());
    System.out.print(":");
    System.out.println(d.getVersion()); 
}           

2 ответа

Решение

На самом деле вы были довольно близки к чтению зависимостей. Все, чего не хватало, было:

Model model = mavenreader.read(new FileReader(pomFile));

Полный пример:

MavenXpp3Reader mavenreader = new MavenXpp3Reader();

File pomfile = new File("pom.xml");
Model model = mavenreader.read(new FileReader(pomFile));

List<Dependency> deps = model.getDependencies();

for (Dependency d: deps) {          
    System.out.print(d.getArtifactId());
} 

Это не дает вам дерево зависимостей, но вы можете повторить его для найденных зависимостей.

К сожалению, это не так тривиально:-) Я могу дать вам несколько советов (учитывая, что вам нужны артефакты только из центрального репо).

Вот отличный пример кода, который я нашел на Github. Альтернативой может быть использование REST API центрального репо. Вот пример, как это сделать программно.

Кстати, если вам нужны только зависимости, вы также можете напрямую использовать плагин maven-dependency-plugin (это вызывается, например, mvn dependency:tree - см. эту ветку для примера).

Возможно, ваш метод также может работать, но я думаю, что ему нужны некоторые недостающие части.

Другие вопросы по тегам