Настройка удаленного удаленного хранилища Maven

Я пытаюсь настроить частный удаленный репозиторий для нашей команды. Теперь репозиторий обслуживает следующие действия, которые я пробовал -

  • Когда выдается " mvn компиляция", тогда он ищет зависимости в "~/.m2". Если он там не найден, он переходит в удаленный приватный репозиторий, и когда зависимости все еще отсутствуют здесь, он переходит в центральный репозиторий.

  • Перед компиляцией я должен поместить все зависимости в наш частный (и удаленный) репозиторий вместе с контрольной суммой и метаданными.

  • Когда нам нужен артефакт (например, spring -mvc), нам нужно поместить его в удаленный закрытый репозиторий вместе со всеми зависимостями этого артефакта (spring -mvc). В этом случае "spring -mvc" загружается из нашего удаленного частного репозитория. Но зависимости "spring -mvc" не загружаются из нашего удаленного частного репозитория. Они загружаются из центрального репозитория.

Теперь то, что я пытаюсь сделать, -

  • Конфигурирование частного удаленного репозитория "R" таким образом, что мне не нужно связывать все зависимости от него вручную. Когда "mvn compile" выдается, прежде всего; поиск зависимостей происходит в "~/.m2", если не найден, то он переходит в частный удаленный репозиторий "R" . Если зависимости найдены в "R" , тогда "~/.m2" получит его из "R" . Если зависимости не найдены в "R" , эти зависимости загружаются из центральных репозиториев и сохраняют зависимости в "R" для дальнейшего использования. После этого "~/.m2" получит их из "R" . Здесь мне не нужно вручную устанавливать зависимости в нашем удаленном частном репозитории "R" .

  • '~/.m2' получит все зависимости от "spring -mvc" (которая является основной зависимостью, упомянутой в моем проекте pom.xml) из удаленного частного репозитория "R" и "R" , будут получать их из соответствующего центрального хранилища.

Может ли кто-нибудь предложить какой-либо путь/или учебник для справки для удовлетворения этих двух целей? Спасибо заранее.

EDIT: Я пробовал ответить Nathaniel Waisbrot и nexus-2.7.0-06-bundle. После нескольких часов усилий я могу настроить его, пока я использую jre-7. С jre-6 связь не может быть запущена. Но наш проект развернут с JDK-6. Мы не хотим менять текущую версию jre. С jre-6 apache-archiva в порядке. Но я не уверен, смогу ли я достичь всех целей в предыдущем разделе. Есть ли пользователь/эксперт archiva, который может сказать мне, могу ли я выполнить эти цели в предыдущем разделе?

Ответ 1

У меня есть настройка nexus для зеркалирования моего локального репозитория maven (в ~/.m2/repository.). Поскольку этот пост по-прежнему посещают многие люди, я думаю, что было бы полезно для других, если бы я как я настроил nexus как диспетчер хранилища. Эта процедура отлично работает для меня в Ubuntu 12.04. Вот он -

1. Загрузите nexus-2.11.1-01-bundle.tar.gz или последнюю версию nexus ОСС.

2. Извлеките файл tar в свой домашний каталог

$ tar -xvf nexus-2.11.1-01-bundle.tar.gz

Теперь вы получите две директории - nexus-2.11.1-01 и sonatype-work в своем домашнем каталоге.

3. Скопируйте эти два каталога в каталог /usr/local/ (их можно скопировать в другое место) -

$ cp -r nexus-2.11.1-01 /usr/local/
$ cp -r sonatype-work /usr/local/

Файлы исполняемого файла/конфигурации, связанные с nexus, хранятся в каталоге nexus-2.11.1-01, а файл jar, указанный в pom.xml, хранится в каталоге sonatype-work.
Эти файлы jar являются зеркалами вашего ~/.m2/repository. В первый раз вы выдаете команду mvn package, тогда все jar хранятся здесь. После этого, когда вы выдаете mvn package снова, все банки загружаются из репозитория nexus вместо загрузки из центрального репозитория.

4. Перейдите в каталог /usr/local/ -

$ cd /usr/local/  

5. Создайте ссылку на nexus-2.11.1-01 -

$ sudo ln -s nexus-2.7.0-06 nexus

6. Теперь для запуска типа нексуса в терминале -

$ bash nexus/bin/nexus console  

Здесь nexus прилагается к консоли. Если вы закроете консоль, сервер nexus будет прерван. Когда вы пытаетесь запустить nexus для серверной машины Ubuntu, вы можете использовать экран .

Примечание.. При попытке запустить nexus с помощью приведенной выше команды могут возникнуть две проблемы. Если вы не обнаружили никаких проблем, пропустите следующие 2 шага (шаг 7 и 8).

7. Первая проблема может возникнуть из-за недостаточного разрешения. Прочтите сообщение об ошибке и выполните необходимые действия. Но как быстрое решение вы можете это сделать -

$ sudo chmod -R 777 nexus-2.11.1-01/
$ sudo chmod -R 777 sonatype-work/

8. Если вы используете любую версию jdk ниже java 7, чем может отображаться следующее сообщение об ошибке -

обертка | Запуск JVM... обертки | JVM вышел во время загрузки выражение. jvm 1 | Исключение в потоке "main" java.lang.UnsupportedClassVersionError: org/sonatype/nexus/bootstrap/jsw/JswLauncher: Неподдерживаемый major.minor версия 51.0

В этом случае используйте jdk7 для запуска команды, упомянутой в шаге 6. В ubuntu ее довольно легко. Предполагая, что у вас есть два jdk - jdk6 и jdk7. Ваш проект работает на jdk6. Тогда только для работы с nexus вы можете сделать это с вашего терминала (при условии, что ваш каталог jdk7 в /usr/lib/jvm/jdk1.7.0_45) -

$ export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_45
$ export PATH=$JAVA_HOME/bin:$PATH  

9. Теперь в браузере введите адрес - http://localhost:8081/nexus/. Если шаг 1 - 6 (если произошли ошибки, а затем шаги с 1 по 8), вы можете успешно найти экран входа в систему. Имя пользователя по умолчанию - admin, а пароль - admin123

10. Остановить связь. Просто закройте терминал или нажмите Ctrl + C на шаге 6. В каталоге ~/.m2 создайте пустой файл с именем - settings.xml. Скопируйте следующий контент в этот settings.xml файл -

<settings>
    <mirrors>
        <mirror>
        <!--This sends everything else to /public -->
            <id>nexus</id>
            <mirrorOf>*</mirrorOf>
            <url>http://localhost:8081/nexus/content/groups/public</url>
        </mirror>
    </mirrors>

    <profiles>
        <profile>
            <id>nexus</id>
            <!--Enable snapshots for the built in central repo to direct -->
            <!--all requests to nexus via the mirror -->
            <repositories>
                <repository>
                <id>central</id>
                <url>http://central</url>
                <releases><enabled>true</enabled></releases>
                <snapshots><enabled>true</enabled></snapshots>
                </repository>
            </repositories>

            <pluginRepositories>
                <pluginRepository>
                    <id>central</id>
                    <url>http://central</url>
                    <releases><enabled>true</enabled></releases>
                    <snapshots><enabled>true</enabled></snapshots>
                </pluginRepository>
            </pluginRepositories>
        </profile>
    </profiles>

    <activeProfiles>
    <!--make the profile active all the time -->
        <activeProfile>nexus</activeProfile>
    </activeProfiles>
</settings>

11. И добавьте следующие строки в проект pom.xml file -

<distributionManagement>
    <snapshotRepository>
        <id>my-snapshots</id>
        <name>My internal repository</name>
        <url>http://localhost:8081/nexus/content/repositories/snapshots</url>
    </snapshotRepository>

    <repository>
        <id>my-releases</id>
        <name>My internal repository</name>
        <url>http://localhost:8081/nexus/content/repositories/releases</url>
    </repository>
</distributionManagement>

Ответ 2

Sonatype Nexus делает все, что вам нужно, нуждается в очень небольшой конфигурации для того, что вы просите, и имеет приятный интерфейс. Там некоторые подробности об основной настройке под вопросом "Внутренний репозиторий Maven, действительно ли это сложно?

В принципе, вы можете настроить Nexus как хранилище кеширования: ваш клиент Maven будет посещать только внутренний репозиторий. Когда внутренний репозиторий не может найти артефакт, он отправляется в Central (или любые другие внешние репозитории, которые вы определяете), извлекает его для вас и сохраняет его позже.

Это классно, потому что, если вы хотите перейти из режима "свободные" для всех без ограничений, в Nexus, это упростит работу. Вы настроите его, чтобы вытащить из центра, запустите свою сборку с чистой машины (заставляя Nexus загладить все текущие центральные зависимости), а затем отключите функцию proxy-repo (так что любые новые/измененные зависимости будут управляться devops).

Ответ 3

То, что вы описали, в значительной степени является конфигурацией по умолчанию для большинства менеджеров репозитория, включая Archiva. Помогает ли следующая помощь в ее настройке для использования с Maven?

http://archiva.apache.org/docs/1.3.6/userguide/using-repository.html