2012-02-24 4 views
0

Только что загрузили плагин Eclipse и полюбите его! Мне интересно, какой веб-сервис он использует для разрешения всех транзитивных зависимостей проекта.Служба Maven, используемая для графа зависимостей

Я предположить, что он работает путем разбора всех <dependency> элементов из проекта pom.xml, и использует сервис для запроса Maven для каждой транзитивной зависимости.

В принципе, я спрашиваю: Как m2e заполнить местный кеш Maven, хранящийся в ~/.m2?

ответ

2

Плагин работает так же, как и с командной строкой progam mvn Maven.

Предполагая, POM и Maven файл настроек вашего проекта не изменяет настройки репозитория по умолчанию Maven будет загружать файлы с Maven Central

http://repo1.maven.org/maven2/

Итак, принимая зависимость следующим образом:

<dependency> 
    <groupId>log4j</groupId> 
    <artifactId>log4j</artifactId> 
    <version>1.2.16</version> 
</dependency> 

Maven будет использовать следующий URL-соглашение (макет хранилища Maven2):

<Repository URL>/<groupId>/<artifactId>/<version>/<artifactId>-<version>.<packaging> 

Чтобы скачать 2 файла:

  1. http://repo1.maven.org/maven2/log4j/log4j/1.2.16/log4j-1.2.16.pom
  2. http://repo1.maven.org/maven2/log4j/log4j/1.2.16/log4j-1.2.16.jar

Первый модуль POM, чья упаковка элемент будет указывать расширение имени файла использовать при загрузке второго файла (по умолчанию «jar»).

Наконец Maven будет рекурсивно читать POM файлы, связанные с другими зависимостями, перечисленных в POM и решить, какие другие модули для загрузки (зависимостей зависимостей)

+0

Удивительный ответ - спасибо Марк! Где Maven загружает этот файл (локально)? Я знаю, что 'm2e' использует' ~/.m2' ... но как насчет 'mvn'? – IAmYourFaja

+1

Справочник "~ /.m2/repository "называется локальным репозиторием. Мне нравится думать об этом как локальном кеше файлов, ранее загруженных из других репозиториев Maven, что повышает эффективность и позволяет автономную сборку Maven. Похоже, что и клиенты m2e, и mvn используют такая же конфигурация имеет смысл –

3

Запуск нормального процесса разрешения зависимостей Maven; для каждой зависимости он рекурсивно решает транзитивные зависимости. «Служба» - это просто запрос POM-зависимостей от любых сконфигурированных хранилищ Maven.

+0

Так как банки на самом деле показывают в моем '~/.m2' каталог? Они просто волшебным образом проявляют себя? В какой-то момент 'm2e' должен посылать сигнал по сети в репозиторий Maven, говоря« эй! Отправьте мне x »и происходит загрузка. Я спрашиваю, что это за сервис и как с ним взаимодействовать. – IAmYourFaja

+0

@AdamTannon Обычно это обычные URI, такие как 'http: //' или 'file: //', см. [Репозитории Maven] (http://maven.apache.org/guides/introduction/introduction-to-repositories.html). В этом нет ничего особенно интересного. Есть также тонны Maven-alikes, такие как Gradle и т. Д., Которые используют один и тот же механизм разрешения, причем источник доступен. –

0

Я не уверен, как это работает в m2e, но вы можете сделать то же самое в командной строке, используя mvn dependency:tree. Эта команда поддерживает различные форматы вывода: текст, точка, график, tgf. См. maven dependency plugin docs.

Смежные вопросы