Как я могу настроить maven для работы как с корпоративными / VPN, так и с настройками хранилища publi c? - PullRequest
0 голосов
/ 07 апреля 2020

Мне нужна установка, чтобы иметь возможность компилировать Java Maven-проект с использованием:

  • корпоративного репозитория Maven (intr anet Artifactory proxy Maven Central и других)
  • publi c Репозитории Maven (Central, ICM, io.confluent, et c.)

Код POM проекта уже ссылается на внутренний корпоративный репозиторий :

<repositories>
    <repository>
        <id>artifactory-virtual</id>
        <name>My Artifactory Repository to download</name>
        <url>https://artifactory.corporation.com/maven</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
</repositories>

Но для работы с этим хранилищем требуется VPN-соединение, которого я бы хотел избежать.

Я пытаюсь настроить зеркало хранилища, используя эту документацию Maven .

Следовательно, я настраиваю в своей ~/.m2/settings.xml следующую конфигурацию:

<?xml version="1.0" encoding="UTF-8"?>
<settings>
    ...
    <mirrors>
        <mirror>
            <id>icm-mirror</id>
            <url>http://maven.icm.edu.pl/artifactory/repo/</url>
            <mirrorOf>*,!central</mirrorOf>
        </mirror>
    </mirrors>
    ...
</settings>

, но просто предоставляя только зеркало (для всех репозитариев, кроме центрального), проект все еще пытается загрузить из корпоративного репозитория (я не предоставляю):

[ERROR] Failed to execute goal on project ibis-customer-management:
    Could not resolve dependencies for project com.example.project:myproject:jar:3.7.1-SNAPSHOT:
    Failed to collect dependencies at com.oracle.jdbc:ojdbc8:jar:18.3.0.0:
    Failed to read artifact descriptor for com.oracle.jdbc:ojdbc8:jar:18.3.0.0: Could not transfer artifact com.oracle.jdbc:ojdbc8:pom:18.3.0.0 from/to artifactory-virtual (https://artifactory.corporation.com/maven):
    Transfer failed for https://artifactory.corporation.com/maven/com/oracle/jdbc/ojdbc8/18.3.0.0/ojdbc8-18.3.0.0.pom:
    Connect to artifactory.corporation.com [artifactory.corporation.com/1.2.3.4] failed:
    Operation timed out -> [Help 1]

Ошибка не исправлена, даже если я создаю активный профиль с явной записью для репозитория ICM:

<settings>
    ...
    <mirrors>
        <mirror>
            <id>icm-mirror</id>
            <url>http://maven.icm.edu.pl/artifactory/repo/</url>
            <mirrorOf>*,!central</mirrorOf>
        </mirror>
    </mirrors>

    <profiles>
        <profile>
            <id>not-corpnet</id>

            <repositories>
                <repository>
                    <id>icm</id>
                    <name>ICM Repository</name>
                    <url>http://maven.icm.edu.pl/artifactory/repo/</url>
                </repository>
            </repositories>
        </profile>
    </profiles>

    <activeProfiles>
        <activeProfile>not-corpnet</activeProfile>
    </activeProfiles>
    ...
</settings>

Если вы думаете, что В моем settings.xml может быть что-то еще, приведенное выше в значительной степени полное (без точек и с правильными XML пространствами имен.

Профиль также активен и виден при запуске mvn

[INFO] --- maven-help-plugin:3.2.0:active-profiles (default-cli) @ myproject ---
[INFO]
Active Profiles for Project 'com.example.project:myproject:pom:3.7.1-SNAPSHOT':

The following profiles are active:

 - not-corpnet (source: external)

Как я могу сделать свой проект, в котором уже есть POM, корпоративный репозиторий, для загрузки артефактов из репозиториев publi c, когда я не нахожусь в корпоративной сети / VPN?

1 Ответ

1 голос
/ 15 апреля 2020

Наконец-то мы достигли настройки OK, которая работает одинаково как в общедоступных c, так и в корпоративных сетях, выполнив следующие действия:

  • проект pom.xml содержит необходимые публикации c репозитории:

    <repositories>
        <repository>
            <id>central</id>
            <name>Central Repository</name>
            <url>https://repo1.maven.org/maven2/</url>
        </repository>
        <repository>
            <id>icm</id>
            <name>ICM Repository</name>
            <url>http://maven.icm.edu.pl/artifactory/repo/</url>
        </repository>
        <repository>
            <id>confluent</id>
            <name>Confluent Repository</name>
            <url>http://packages.confluent.io/maven/</url>
        </repository>
    </repositories>
    

    Если предположить, что для проекта не требуются не публикуемые c зависимости, это позволит работать в режиме "извлекать и запускать" в общедоступных c средах.

  • если мы находимся внутри корпоративной сети (с доступом к частным репозиториям) и за корпоративным прокси, мы используем файл settings.xml, который каждый разработчик может использовать (~/.m2/serttings.xml) для разработки внутри корпоративная среда. Этот файл содержит <proxies> и <mirrors>:

    <mirrors>
        <mirror>
            <id>internal-repository-mirror</id>
            <name>Maven Mirror</name>
            <url>https://artifactory.corporation.com/maven</url>
            <mirrorOf>*,!confluent</mirrorOf>
        </mirror>
        <mirror>
            <id>internal-confluent-mirror</id>
            <name>Confluent Mirror</name>
            <url>https://artifactory.corporation.com/confluent-maven</url>
            <mirrorOf>confluent</mirrorOf>
        </mirror>
    </mirrors>
    
    <proxies>
        <proxy>
            <id>corpnet-http-proxy</id>
            <active>true</active>
            <protocol>http</protocol>
            <host>proxy.corporation.com</host>
            <port>8079</port>
            <nonProxyHosts>artifactory.corporation.com</nonProxyHosts>
        </proxy>
        <proxy>
            <id>corpnet-https-proxy</id>
            <active>true</active>
            <protocol>https</protocol>
            <host>proxy.corporation.com</host>
            <port>8079</port>
            <nonProxyHosts>artifactory.corporation.com</nonProxyHosts>
        </proxy>
    </proxies>
    

Никаких других репозиториев или профилей в файле settings.xml не требуется.

Относительно того, как settings.xml заменяется автоматически c, я использую следующий подход, который подходит моему стилю работы, когда у меня всегда открыт терминал:

  • , когда я запускаю окно терминала / вкладка ~/.bash_profile (или эквивалент) выполняется
  • в зависимости от сети, в которой я работаю (publi c или корпоративная / VPN). Я копирую / перезаписываю один из двух существующих settings.xml файлов, которые я подготовил: ** settings-public.xml почти пусто (возможно, у меня есть несколько специальных репозиториев, которые я использую при игре / экспериментировании с кодом) ** settings-corpnet.xml, содержащая как минимум разделы <mirrors> и <proxies>, указанные выше
...