Извлечение артефакта Maven из репозитория с использованием Maven Java API

Если у меня есть информация об артефакте Maven (GroupId, ArtifactId, Version), как я могу программно (используя Java) получить этот артефакт из моего локального репозитория?

В частности, мне нужно иметь возможность подключиться к репозиторию Maven и создать/извлечь org.apache.maven.artifact.Artifact, чтобы я мог получить файл, связанный с артефактом.

Я просмотрел исходный код m2e, но MavenImpl.java (который обеспечивает разрешение артефактов) намного сложнее, чем мне нужно, и мне трудно понять, как работает подключение к репозиторию.


person davdic    schedule 26.07.2012    source источник


Ответы (3)


Вы, вероятно, захотите взглянуть на Aether. См. примеры на Wiki.

person Philippe Marschall    schedule 26.07.2012
comment
Спасибо! Это именно то, что мне нужно! - person davdic; 27.07.2012
comment
Примечание для тех, кто ищет это: Aether был принят фондом apache и переименован в maven-resolver: mvnrepository.com/artifact/org.apache.maven.resolver - person oowekyala; 08.04.2020

Вы можете создать URL-адрес из предоставленной информации и загрузить файл (обратите внимание, замените '.' в <groupId> на '/'):

<repositoryUrl>/<groupId>/<artifactId>/<version>/<artifactId>-<version>.<type>
person jtahlborn    schedule 26.07.2012

Вот как мы это делаем в jcabi-aether:

final File repo = this.session.getLocalRepository().getBasedir();
final Collection<Artifact> deps = new Aether(this.getProject(), repo).resolve(
  new DefaultArtifact("junit", "junit-dep", "", "jar", "4.10"),
  JavaScopes.RUNTIME
);

Дайте ему список удаленных репозиториев, местоположение локального репозитория и координаты Maven артефакта. Как видно из названия, библиотека использует Apache Aether от Sonatype.

person yegor256    schedule 28.10.2012
comment
Привет! Я пытаюсь использовать jcabi-aether вне проекта maven, как показано здесь: aether.jcabi.com/index.html, но я всегда получаю исключение компиляции: Ошибка: (22, 25) java: невозможно получить доступ к файлу класса org.apache.maven.project.MavenProject для org.apache.maven.project.MavenProject не найден. Если я включу maven-core, я получу другие исключения. Почему? Этот проект еще поддерживается? - person Gergely Fehérvári; 07.04.2016