Настройка частного удаленного репозитория Maven

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

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

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

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

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

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

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

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

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

3 ответов


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

1. скачать nexus-2.11.1-01-бандл.смола.gz или последняя версия nexus oss.

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 хранящиеся в .
Эти файлы jar являются зеркалом вашего ~/.m2/repository. Первый раз, когда вы выдаете mvn package команда тогда все jars хранятся здесь. После этого, когда вы выпускаете mvn package опять же, все банки загружаются из репозитория nexus вместо загрузки из центрального репозитория.

4. перейти к -

$ cd /usr/local/  

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

$ sudo ln -s nexus-2.7.0-06 nexus

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

$ bash nexus/bin/nexus console  

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

Примечание: при попытке запустить nexus с помощью команды выше может возникнуть 2 проблемы. Если вы не нашли затем пропустите следующие 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" Ява.ленг.UnsupportedClassVersionError: org/sonatype/nexus/bootstrap/jsw / JswLauncher : неподдерживаемый major.незначительный версия 51.0

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

$ 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. остановить nexus. Просто закройте терминал или нажмите Ctrl+C на шаге 6 терминал. В тебе!--27--> каталог создайте пустой файл с именем - 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. и добавьте следующие строки в -

<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>

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

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

это круто, потому что, если вы хотите перейти от grab-whatever-dependencies-you-want free-for-all к заблокированной среде, Nexus упрощает это. Вы настроили его, чтобы вытащить из Центра, запустить сборку с чистой машины (заставляя Nexus глотать все текущие центральные зависимости), а затем отключить функцию прокси-РЕПО (поэтому любые новые/измененные зависимости будут управляться devops).


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

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