如何配置maven以同时处理公司/VPN和公共存储库设置



我需要一个设置,以便能够使用以下任意一种方法编译Java Maven项目:

  • 企业Maven存储库(代理Maven Central和其他的intranet Artifactory(
  • 公共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连接,我希望避免这种连接。

我正在尝试使用这个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)

当我不在公司网络/VPN中时,我如何使我的项目(已经在其POM中作为公司存储库(从公共存储库下载工件?

我们通过以下操作最终达成了一个OK设置,该设置在公共和公司网络中都以相同的方式工作:

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

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

    假设项目不需要非公共依赖项,这将允许在公共环境中使用"签出并运行"的工作方式。

  • 如果我们在公司网络内部(可以访问专用存储库(,并且在公司代理之后,我们使用一个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(或等效程序(
  • 根据我所在的网络(公共或公司/VPN(,我复制/覆盖我准备的两个现有settings.xml文件之一:**settings-public.xml几乎是空的(可能有一些特殊的存储库,我在玩/实验代码时使用(**至少包含上述<mirrors><proxies>部分的settings-corpnet.xml

相关内容

  • 没有找到相关文章

最新更新