Отключить Maven центральное хранилище - PullRequest
51 голосов
/ 15 февраля 2011

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

Другими словами, я не хочу, чтобы Maven пытался любых загрузок из центра.

Я знаю, как настроить локальный репозиторий (сетевой или нет), моя идея - использовать «благословенный» компьютер для обновления локального репозитория.

PS: я мог бы блокировать запросы на уровне прокси / сети, но я спрашиваю, как это сделать с помощью конфигурации Maven.

UPDATE Я наконец-то понял, как это сделать. В доме maven в каталоге conf находится глобальный settings.xml. Вы можете либо установить зеркало на central, которое указывает на некоторый внутренний сервер, либо просто переопределить его определение.

Ответы [ 7 ]

44 голосов
/ 15 февраля 2011

Согласовано.Прямые загрузки из внешних репозиториев не должны быть разрешены в ваших сборках релиза.

Конкретный ответ на ваш вопрос - вторая часть моего ответа :-)

Настройка менеджера репозитория

Я бы порекомендовал установить местного менеджера хранилища Maven.Хорошие варианты следующие:

Все они способны выступать в роли кеширующего прокси для доступных извне центральных фляг Maven.

Возможно, вас заинтересует версия Nexus для Profession.Он включает Комплект закупок для управления внешними библиотеками.Он также предоставляет плагины Maven для централизованного управления файлом настроек Maven, который является второй частью моего ответа ...

Локальные настройки Maven

Обновление файла настроек , расположенногов следующем каталоге:

$ HOME / .m2 / settings.xml

Укажите, что все центральные запросы должны перенаправляться в локальный репозиторий Maven:

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      http://maven.apache.org/xsd/settings-1.0.0.xsd">
  ...
  <mirrors>
    <mirror>
      <id>central-proxy</id>
      <name>Local proxy of central repo</name>
      <url>http://<hostname>/central</url>
      <mirrorOf>central</mirrorOf>
    </mirror>
  </mirrors>
  ...
</settings>
42 голосов
/ 12 июня 2012

Мне показалась полезной страница Настройка артефактов . Далее говорится о настройке «зеркало любого».

Не используйте «зеркальное отображение» само по себе, как единственное правило разрешения. Используйте его для принудительного разрешения любых артефактов строго через Artifactory. Конфигурация прокси «зеркала любого» работает для определенных репозиториев. Он заменит, но не скроет, встроенные центральные репозитории и репозитории моментальных снимков, если они не отменены пользователем. Он определяет правило грубого прокси, которое не делает различий между выпусками и моментальными снимками, и полагается на определенные репозитории для выполнения этой фильтрации разрешения.

Super POM Maven определяет центральный репозиторий. Вот как вы можете переопределить центральный репозиторий и плагин-репозиторий для выпусков и снимков:

<repositories>
    <repository>
        <id>central</id>
        <url>http://repo1.maven.org/maven2</url>
        <releases>
                <enabled>false</enabled>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>    
</repositories>
<pluginRepositories>
    <pluginRepository>
        <id>central</id>
        <url>http://repo1.maven.org/maven2</url>
        <releases>
            <enabled>false</enabled>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </pluginRepository>
</pluginRepositories>

Конечно, у вас должна быть настроена замена, как указано в принятом ответе.

5 голосов
/ 17 апреля 2012

В случае корпоративного репозитория, который должен обрабатывать все запросы артефактов, вы можете настроить один репозиторий для зеркального отображения всего в вашем $MAVEN_HOME/conf/settings.xml:

<mirror>
  <id>internal-repository</id>
  <name>Maven Repository Manager running on repo.mycompany.com</name>
  <url>http://repo.mycompany.com/proxy</url>
  <mirrorOf>*</mirrorOf>
</mirror>

Источник

4 голосов
/ 03 марта 2011

Самый простой способ - использовать параметр -o, который указывает maven работать в автономном режиме.Конечно, вам необходимо убедиться, что в вашем локальном репо есть все, что вам нужно, но это, по крайней мере, устранит любые проблемы с безопасностью, которые могут возникнуть при автоматическом подключении к неутвержденному репо.

3 голосов
/ 05 августа 2015

Похоже, что кто-то активно пытается внедрить вашу политику управления Open Source.Приятно слышать.

Согласитесь с другим комментарием об использовании внутреннего менеджера хранилища для размещения компонентов, необходимых для Maven.

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

Марк хорошо показывает возможности закупок Nexus.Как только этот внутренний менеджер репо настроен со всеми вашими «одобренными» компонентами, вы также можете включить функцию проверки работоспособности Nexus Repository *1008* (это бесплатно), которая сообщает обо всех лицензиях компонентов, известных безопасностиуязвимости и т. д. для компонентов в ваших репозиториях.

Полное раскрытие, я работаю на Sonatype.

2 голосов
/ 05 марта 2018

В прошлом я обнаружил, что наиболее надежным решением является ручное переопределение встроенных репозиториев.Я нашел этот подход лучше, чем изменение родительского POM, settings.xml, зеркала или профилей.Для всех внутренних проектов, в настройках POM укажите настройки ниже.

<repositories>
    <repository>
        <id>central</id>
        <url>http://internalrepo</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
    <repository>
        <id>snapshots</id>
        <url>http://internalrepo</url>
        <releases>
            <enabled>false</enabled>
        </releases>
    </repository>
</repositories>
<pluginRepositories>
    <pluginRepository>
        <id>central</id>
        <url>http://internalrepo</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </pluginRepository>
    <pluginRepository>
        <id>snapshots</id>
        <url>http://internalrepo</url>
        <releases>
            <enabled>false</enabled>
        </releases>
    </pluginRepository>
</pluginRepositories>
0 голосов
/ 11 августа 2013

У меня была такая же проблема, но с другой причиной. Решением было отключить Avira Browser Protection (на немецком языке Browser-Schutz). Я взял решение из m2e не может передать метаданные из Nexus, но командная строка Maven может .

...