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

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

  • Когда выдается "mvn compile", он ищет зависимости в "~/.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" получит их из соответствующего центрального репозитория,

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

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

3 ответа

Решение

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

1. Скачайте nexus-2.11.1-01-bundle.tar.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 хранятся в sonatype-work каталог.
Эти фляги - зеркало вашего ~/.m2/repository, Впервые вы выдаете mvn package Затем команда jar Здесь хранятся. После того, когда вы выпускаете mvn package опять же, все файлы jar загружаются из хранилища nexus вместо загрузки из центрального хранилища.

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

$ 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, вы можете использовать screen.

Примечание. При попытке запустить 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" 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 файл -

<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 будет посещать только внутренний репозиторий. Когда внутренний репозиторий не может найти артефакт, он отправляется в Центральный (или любые другие внешние репозитории, которые вы определили), выбирает его для вас и сохраняет для дальнейшего использования.

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

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

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

Другие вопросы по тегам