Транзитивно загрузить артефакт Maven в локальный репозиторий - PullRequest
7 голосов
/ 25 мая 2011

Я пытаюсь загрузить определенный артефакт (и все его зависимости) в локальный репозиторий компьютера.

Может показаться, что лучше использовать для этого зависимость: get target, но, несмотря на документацию, на самом деле не получается получить транзитивные зависимости.

Вот пример, в котором я пытался использовать dependency:get для загрузки jar-файла core-core и всех его многочисленных зависимостей. Вы заметите, что единственное, что загружается, - это банка с пружинным сердечником, несмотря на то, что это было сделано после очистки локального хранилища.

$ mvn org.apache.maven.plugins:maven-dependency-plugin:2.2:get -DrepoUrl=http://repo1.maven.org/maven2/ -Dartifact=org.springframework:spring-core:3.0.5.RELEASE -Dtransitive=true
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.2:get (default-cli) @ standalone-pom ---
Downloading: http://repo1.maven.org/maven2/org/springframework/spring-core/3.0.5.RELEASE/spring-core-3.0.5.RELEASE.jar
Downloaded: http://repo1.maven.org/maven2/org/springframework/spring-core/3.0.5.RELEASE/spring-core-3.0.5.RELEASE.jar (374 KB at 548.4 KB/sec)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.401s
[INFO] Finished at: Wed May 25 00:29:47 CDT 2011
[INFO] Final Memory: 7M/107M
[INFO] ------------------------------------------------------------------------



Мои вопросы:

  1. Это ошибка с целью dependency:get?
  2. Если нет, то что я делаю не так?
  3. Существуют ли альтернативные методы, которые я мог бы использовать для достижения своей изначально заявленной цели?

Ответы [ 3 ]

6 голосов
/ 25 мая 2011

Если это одноразовое или нерегулярное событие для вас, самое простое, что нужно сделать, это определить зависимость в POM и запустить mvn package или аналогичный метод для извлечения артефактов зависимости. Вы также можете попробовать mvn dependency:sources, если вы хотите, чтобы исходные файлы тоже были.

Если это то, что вы хотите делать более регулярно или как часть процесса, вы можете использовать Aether напрямую, чтобы получить зависимости для вас.

Другой подход, если вам необходимо регулярно выполнять управление группами артефактов в вашей внутренней экосистеме разработки, - это использовать Комплект закупок Nexus для извлечения зависимостей и управления ими в вашем хранилище.

4 голосов
/ 26 мая 2011

Вы можете пойти с этим решением

1) Загрузите артефакт, как вы описали (я тестировал с версией 2.5.2)

c:\test>mvn -DrepoUrl=http://repo1.maven.org/maven2/ -Dartifact=org.springframework:spring-core:2.5.2 -Dtransitive=true

2) Загрузите пом (-Dpackaging=pom) этого артефакта

c:\test>mvn -DrepoUrl=http://repo1.maven.org/maven2/ -Dartifact=org.springframework:spring-core:2.5.2 -Dtransitive=true -Dpackaging=pom org.apache.maven.plugins:maven-dependency-plugin:2.2:get

3) Используйте скачанный pom для копирования всех зависимостей через dependency:copy-dependency gaol

c:\test>mvn -DoutputDirectory=C:/test/dependency -f C:/<path-to-repository>/org/springframework/spring-core/2.5.2/spring-core-2.5.2.pom dependency:copy-dependencies

Вы найдете зависимости (включая test и optional scope!) В созданной папке c:\test\dependency. Чтобы исключить тест и необязательную область видимости, используйте -DincludeScope=runtime.

Вам необходимо динамически построить некоторую информацию о пути (например, путь к pom в вашем хранилище), чтобы настроить это решение, а также необходимо объединить сам артефакт с его зависимостями, но он должен работать в сценарии без создания специального pom (что может быть проще).

3 голосов
/ 25 мая 2011

Может показаться, что ответ на вопрос № 1 (это ошибка с зависимостью: получить цель?) - да.По состоянию на 25.05.2011 проблема MDEP-308 все еще не решена.

...