Как я могу получить доступ к 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
- см. эту ветку для примера).
Возможно, ваш метод также может работать, но я думаю, что ему нужны некоторые недостающие части.