Обновите хранилище Nexus с локальными артефактами - PullRequest
9 голосов
/ 22 ноября 2010

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

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

1 Ответ

13 голосов
/ 03 января 2011

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

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

Чтобы разместить свои артефакты, вам необходимо:

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

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

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

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

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

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

...