gpt4 book ai didi

maven - 我如何配置 Maven 以应对公司/VPN 和公共(public)存储库设置?

转载 作者:行者123 更新时间:2023-12-02 16:43:27 34 4
gpt4 key购买 nike

我需要一个能够使用以下任一方式编译 Java Maven 项目的设置:

  • 企业 Maven 存储库(内联网 Artifactory 代理 Maven Central 和其他)
  • 公共(public) Maven 存储库(Central、ICM、io.confluent 等)

项目 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 连接,我想避免。

我正在尝试使用 this Maven documentation 设置存储库镜像.

因此我在我的 ~/.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>

但只是单独提供一个镜像(除了 central 之外的所有 repos),该项目仍在尝试从公司存储库下载(我没有提供任何):

[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)

当我不在公司网络/VPN 中时,如何使我的项目(其 POM 已包含在公司存储库中)从公共(public)存储库下载 Artifact ?

最佳答案

通过执行以下操作,我们最终获得了一个 OK 设置,该设置在公共(public)网络和公司网络中以相同的方式工作:

  • 项目 pom.xml包含所需的公共(public)存储库:

    <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>

    假设项目不需要非公共(public)依赖项,这将允许在公共(public)环境中使用“ checkout 并运行”的工作方式。

  • 如果我们在公司网络内部(可以访问私有(private)存储库)并且在公司代理之后,我们使用 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正在以自动方式交换,我使用以下适合我始终打开终端的工作方式的方法:

  • 当我启动终端窗口/标签时 ~/.bash_profile (或同等)正在执行
  • 根据我所在的网络(公共(public)或公司/VPN),我复制/覆盖现有的两个 settings.xml 之一。我准备的文件:** settings-public.xml几乎是空的(可能有一些我在玩/试验代码时使用的特殊存储库)** settings-corpnet.xml至少包含 <mirrors><proxies>上面指出的部分

关于maven - 我如何配置 Maven 以应对公司/VPN 和公共(public)存储库设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61085197/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com