2010-11-22 7 views
9

Недавно я загрузил некоторые артефакты maven прямо в мой локальный репозиторий (.m2/repository). Теперь я установил диспетчер хранилищ Nexus и вам нужно заполнить его хранилище, чтобы не загружать все артефакты снова. Есть ли способ обновить репозиторий Nexus локальным. Я не хочу просто их копировать, потому что отдельные артефакты Nexus, относящиеся к их общедоступным серверам (центральные, кодовые и т. Д.) И структура локального репозитория, отсутствуют.Обновление репозитория Nexus с локальными артефактами

Обновление: Тем временем я скопировал артефакты из локального хранилища в хранилище Nexus (публичный репозиторий). Я могу перейти к артефактам через Nexus webapp, но Maven каким-то образом не может разрешить артефакты из Nexus. Нужно ли мне регистрировать их особенно? Я повторно проиндексировал публичный репозиторий и перезапустил Nexus несколько раз - никаких изменений.

ответ

13

Nexus имеет несколько типов хранилищ: принимал хранилищам (те, которые на самом деле хранить Maven артефактов), прокси-хранилища (которые перенаправляют трафик на другие удаленные репозитории, когда артефакт запрашиваются), виртуальные хранилищами (простые адаптер репозиториев maven1 [выходит за рамки этого вопроса]). вы также можете создать группы репозитория , которые могут служить артефактами из любого из своих агрегатов (один из них - репозиторий public).

Кроме того, связь разделяет их хранилища в соответствии с его издательской политикой в ​​снимков и выпусков. Первый хранит только артефакты моментальных снимков; в то время как последний, теоретически, может хранить как моментальные снимки, так и релизы, но на самом деле он плохо себя ведет, когда репо очень велико и содержит моментальные снимки.

Для того, чтобы провести свои артефакты вам нужно:

Первое: Разделите локальное хранилище на два: один, содержащих снимки, и другое, содержащие выпуски. Nexus хранилище инструмент Convertion поможет вам, если ваш репо очень большой:

<dependency> 
     <groupId>org.sonatype.nexus.tools</groupId> 
     <artifactId>nexus-repository-conversion-tool</artifactId> 
     <version>1.8.0.1</version> 
     <classifier>cli</classifier> 
    </dependency> 

После downlaoded вы можете просто выполнить java -jar nexus-repository-conversion-tool-1.8.0.1-cli.jar -rSource -oTarget где Source каталог, который содержит локальный репозиторий для перехода к связующей и Target является существующим, пустой и записываемый каталог, в котором инструмент конвертации покинет разделенные хранилища. Если исходный каталог равен repository, а Target - temp, он создаст каталоги temp/repository-snapshots и temp/repository-releases.

Во-вторых: переместите свои разведенные соглашения на связь. И оставьте их в ${NEXUS_HOME}/sonatype-work/nexus/storage, или там, где ваша установка связи настроена для хранения репозиториев.

Третьего: создать два размещенных репозиториев с тем же идентификатором, как репозитории вы перешли на второй стадии. (в примере repository-snapshots10 и repository-releases)

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

+0

Вы также должны рассмотреть, какие артефакты вы размещаете в своем репозитории. Nexus делит репозитории на spanshots и освобождает их в зависимости от того, где он размещает артефакты моментальных снимков или выпуски + снимки. Хотя это sho – Miguel

+0

О, я читаю ваш ответ слишком поздно. Думаю, ваш подход сэкономит мне много времени. Я также выделил моментальные снимки и выпустил артефакты, а затем вручную переместил их в соответствующие репозитории Nexus. Мне как-то пришлось развернуть каждый артефакт выпуска, используя cli. Для моментальных снимков достаточно было переопределить кеш Nexus. Благодаря! – mamuesstack

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