копирование артефакта из локального репозитория maven

Я не понимаю, почему это так сложно:

в скрипте мне нужно скопировать артефакт из nexus в определенный каталог. Используя Nexus REST API, я должен был бы указать репозиторий, о котором я не хочу знать. Поэтому я попытался получить артефакт с помощью Maven-dependency-plugin's get goal, который хорошо работает. (В этом случае я получаю его от группы на нашем nexus, которая включает в себя как релизы, так и снимки.)

однако теперь у меня есть артефакт в моем локальном РЕПО и цели "копирования" того же плагина, похоже, не могут получить этот артефакт оттуда. Действительно ли необходимо спускаться впапка m2 и захватить эту банку с командой unix cp? Кто-нибудь когда-нибудь копировал артефакты из своих локальных репозиториев в другие dirs раньше?

альтернативно, если кто-то может сказать мне, как получить артефакт через API Nexus без указания РЕПО, это тоже сработает.

4 ответов


похоже, проблема была в _maven.файл репозиториев в сочетании с конкретной настройкой maven в моей компании.

мы не помещаем информацию о локальном РЕПО в наши настройки.XML. Это все в Родительском pom, который используют все наши проекты. Но если вы хотите сделать чистую магию mvn-CLI, у вас нет parent-pom, поэтому вы должны сами предоставить URL-адрес локального РЕПО. Это возможно с помощью dependecy: get goal, поэтому я смог загрузить свой артефакт из наша связь с моим местным РЕПО.

при использовании скопировать, однако, вы не можете указать URL-адрес. Но зачем мне это? Я только что загрузил артефакт в местное РЕПО, так?

вот здесь _maven.хранилища вступает в игру. Даже с параметр-o, maven3 советуется, что файл, который задает исходный РЕПО, что артефакт появился. (спасибо ребятам в этой теме для размещения своих выводах!). Если это не может добраться до РЕПО, он будет утверждать, что вашего файла там нет. (Кстати. это не полезно, имхо. Он должен сказать что-то о том, что исходное РЕПО недоступно и что файл поэтому не будет скопирован.)

вот почему копия не работала на меня.

просто переименование этого файла делает трюк.

Мне придется исследовать более чистое решение этого, хотя.

чтобы сделать вещи еще более сложно, я не мог использовать dependency:copy или dependency:copy-dependecies. По некоторым причинам им требуется помпон, которого у меня нет в моем usecase. Какая работа орг.апаш.знаток.Плагины: maven-dependency-plugin:2.8: copy, который, я считаю, должен быть тем же самым, но это другая история.

Спасибо за ваши ответы!


просто попробовал это, и это сработало для меня:

mvn dependency:copy-dependencies -DincludeArtifactIds=jcharts -DincludeGroupIds=jcharts -DoutputDirectory=/tmp/

это скопировало артефакт jcharts: jcharts в /tmp/ он был в моем локальном (и удаленном) репозитории, когда это было выполнено.


Если вы используете Sonatype Nexus, вы должны рассмотреть возможность отключения "Central" как описано в их книге.

В противном случае, per @Keith,dependency:copy-dependency будет делать то, что вы пытаетесь сделать. dependency:get специально загружает из удаленных репозиториев,как указано в документации

вы также можете заставить Maven не загружать из нелокальных репозиториев l, запустив его в автономном режиме: -o

редактировать

вы также можете использовать Maven Вагон Плагин скопировать файл из локального репозитория в произвольный каталог. Это не должно требовать pom (но вам может потребоваться предоставить полный URL-адрес jar).


Мне нужно было указать идентификатор группы, идентификатор артефакта и версию (и упаковку), это сработало для меня:

mvn dependency:copy \
  -Dartifact=org.openmrs.web:openmrs-webapp:2.2.0-SNAPSHOT:war \
  -DoutputDirectory=/tmp