it-swarm-ru.tech

Отключить Maven центральное хранилище

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

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

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

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

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

50
juancn

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

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

Настройте менеджер хранилища

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

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

Вы также можете быть заинтересованы в Профессиональной версии Nexus. Он включает Комплект поставки для управления внешними библиотеками. Он также предоставляет плагины 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>
43
Mark O'Connor

Я нашел страница Настройка разрешения артефактов полезной. В ней говорится о настройке "зеркального отображения".

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

--- Super POM of 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>

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

39
Behe

В случае корпоративного репозитория, который должен обрабатывать все запросы артефактов, вы можете настроить один репозиторий для зеркального отображения всего в вашем $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>

Источник

5
SnakE

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

4
Rory Alsop

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

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

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

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

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

3
Derek E. Weeks

В прошлом я обнаружил, что наиболее надежным решением является ручное переопределение встроенных репозиториев. Я нашел этот подход лучше, чем изменение родительского 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>
2
Jose Martinez

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

0
iuzuz