В Maven 2 можно ли указать зеркало для всего, но разрешить аварийное переключение на прямые репозитории? - PullRequest
4 голосов
/ 18 марта 2010

Я понимаю, что часть привлекательности установки зеркала Maven, такая как:

<mirror>
  <id>nexus</id>
  <name>Maven Repository</name>
  <mirrorOf>*</mirrorOf>
  <url>http://server:8081/nexus/content/groups/public</url>
</mirror>

... заключается в том, что документация гласит:

Вы можете заставить Maven использовать один репозиторий, если он зеркально отображает все запросы к репозиторию.

Однако это также указывает на то, что зеркало * настроило каждую рабочую станцию должен быть вынужден пройти через зеркало?

Я спрашиваю, потому что я хотел бы, чтобы каждая рабочая станция аварийно переключалась и подключалась напрямую к общедоступным репозиториям, о которых она знает, в случае, если Nexus не может разрешить зависимость или плагин.(В идеальном мире каждый разработчик имеет доступ, необходимый для добавления дополнительных репозиториев прокси-серверов по мере необходимости. Однако иногда этот доступ недоступен; иногда сервер Nexus отключается; иногда он испытывает ошибку кучи Java.)

Возможно ли в Maven 2 конфигурация аварийного переключения «зеркало, но идти дальше и напрямую подключаться к общедоступным репозиториям»?Это будет в Maven 3?

Ответы [ 4 ]

5 голосов
/ 19 марта 2010

Нет, нет режима отработки отказа. Вы можете исключить использование некоторых репозиториев с зеркалом с <mirrorOf>*,!repository</mirrorOf>, или вы можете иметь два settings.xml файла, которые будут вести себя по-разному, и переключаться, используя --settings, если это необходимо.

2 голосов
/ 19 марта 2010

Это невозможно в Maven 2. Это возможно в будущем в Maven 3. Мы также рассмотрели возможность добавления этой возможности в Nexus к динамически прокси-артефактам. Суть в том, что большинству организаций нужен контроль над репозиториями прокси, используемыми разработчиками, и поэтому эта функция оказывается очень популярной в менеджере репо.

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

1 голос
/ 18 марта 2010

Один ответ (подразумеваемый в моем вопросе) состоит в том, что это невозможно по замыслу. Комментарий в конце этого билета Джейсона Ван Зила указывает, что

Настоящее зеркало специально не проверено. Работа менеджеров репозитория в наши дни сильно нарушится, если мы начнем делать это.

0 голосов
/ 24 июля 2011

Эта конфигурация также возможна. Это прекрасно работает, хотя есть одна сложная ситуация, если проект имеет иерархическую структуру и не у всех дочерних объектов один и тот же родитель, вам придется скопировать этот раздел даже в их списки. Это означает, что везде, кроме проекта, который объявляет этот фиктивный централ, то есть репо по умолчанию, на который вы обращаетесь, ваш запрос будет направлен в надлежащий maven central или в другие объявленные репозитории в pom проекта. CATCH: вы используете плагин X - и, возможно, не знаете об этом на самом деле - и плагин X зависит от артефакта Y, который в своем pom объявил репо .... >>> Нет контроля над передачей всех запросов на зависимости для нексус

Другой альтернативой является наличие дополнительного файла settings.xml для проектов и его «поставка» $ mvn -s settings.xml

Третий вариант - использовать глобальный файл settings.xml следующим образом и активировать -P-связь только при необходимости, потому что без фальшивого центрального хранилища он работает на удивление.

<settings>
    <mirrors>
        <mirror>
            <id>nexus</id>
            <name>nexus</name>
            <url>http://localhost:8082/nexus-webapp-1.6.0/content/groups/public</url>
            <mirrorOf>*</mirrorOf>
        </mirror>
    </mirrors>

    <profiles>
        <profile>
            <id>nexus</id>

                <repositories>
                <repository>
                    <id>central</id>
                    <url>http://central</url>
                    <releases>
                        <enabled>false</enabled>
                    </releases>
                    <snapshots>
                        <enabled>false</enabled>
                    </snapshots>
                </repository>
            </repositories>
            <pluginRepositories>
                <pluginRepository>
                    <id>central</id>
                    <url>http://central</url>
                    <releases>
                        <enabled>false</enabled>
                    </releases>
                    <snapshots>
                        <enabled>false</enabled>
                    </snapshots>
                </pluginRepository>
            </pluginRepositories>  
        </profile>
    </profiles>
    <activeProfiles>

    </activeProfiles>
</settings>

Откройте изображение в другой вкладке / окне. enter image description here

...