gpt4 book ai didi

maven - 选择在 Maven 中使用哪个代理?

转载 作者:行者123 更新时间:2023-12-04 16:49:35 25 4
gpt4 key购买 nike

我正在使用 Maven 3.x。我知道如何在 .m2/settings.xml 文件中配置代理。我无法弄清楚的是如何在命令行上或通过某些系统属性指定使用哪个代理。此注释出现在 maven.apache.org 提供的示例 settings.xml 中:

This is a list of proxies which can be used on this machine to connect to the network.
Unless otherwise specified (by system property or command-line switch), the first proxy
specification in this list marked as active will be used.

但我没有找到任何地方告诉您 (a) 如何在 settings.xml 中设置代理以支持上述论点,即您可以选择要使用的代理,或 (b ) 如何在命令行上指定要使用的代理。

假设如下:

<settings>
<proxies>
<proxy>
<id>work-one</id>
<protocol>http</protocol>
<host>1.2.3.4</host>
<port>80</port>
<nonProxyHosts>127.0.0.1,localhost,foo...</nonProxyHosts>
</proxy>
<proxy>
<id>work-two</id>
<protocol>http</protocol>
<host>5.6.7.8</host>
<port>80</port>
<nonProxyHosts>127.0.0.1,localhost,bar...</nonProxyHosts>
</proxy>
</proxies>
</settings>

其实分三种情况。

  • 办公室一:需要使用工作一代理的地方。
  • 办公室二:您需要使用工作二代理的地方。
  • 主页:不需要代理的地方。

因此,假设示例 settings.xml(以上)中的注释是正确的,我的任务是寻求满足以下条件的解决方案:

  1. settings.xml中的proxy入口怎么写来支持选择系统属性或命令行开关的代理?
  2. 如何设置系统属性或命令行开关,选择所需的代理?
  3. 在家时如何关闭所有代理?
  4. 实现 (1)、(2) 和 (3) 无需每隔一段时间编辑 settings.xml你搬家的时间。
  5. 提议的解决方案必须同时适用于 Linux 和 Windows。
  6. 建议的解决方案应尽可能减少命令行输入。

已经尝试不成功

使用配置文件设置随后在代理中使用的属性:失败:尽管在命令中说明了配置文件,但提示 nonProxyHosts 中的正则表达式错误和端口中的非整数通过 -P 参数行,配置文件声明在代理声明之前。参见 1608079 ,它对我不起作用,如果它起作用,你怎么会完全不指定代理?

% mvn -U -P workone
... usual stuff...
[WARNING] Some problems were encountered while building the effective settings
[WARNING] Unable to parse element 'port', must be an integer (position: END_TAG seen ...<port>${proxy-port}</port>... @243:30) caused by: java.lang.NumberFormatException: For input string: "${proxy-port}"
... more stuff ...
[ERROR] Internal error: java.util.regex.PatternSyntaxException: Illegal repetition near index 0
[ERROR] ${proxy-no_proxy}
[ERROR] ^

settings.xml 是这样的:

<settings>
...

<profile>
<id>workone</id>
<properties>
<proxy-protocol>http</proxy-protocol>
<proxy-port>80</proxy-port>
<proxy-host>hostnameone</proxy-host>
<proxy-no_proxy>127.0.0.1,127.0.1.1,localhost,machine,*.local,*.domain.name.com</proxy-no_proxy>
</properties>
</profile>

<profile>
<id>worktwo</id>
<properties>
<proxy-protocol>http</proxy-protocol>
<proxy-port>80</proxy-port>
<proxy-host>hostnametwo</proxy-host>
<proxy-no_proxy>127.0.0.1,127.0.1.1,localhost,machine,*.local,*.other.domain.name.com</proxy-no_proxy>
</properties>
</profile>
</profiles>
<proxies>
<proxy>
<protocol>${proxy-protocol}</protocol>
<host>${proxy-host}</host>
<port>${proxy-port}</port>
<nonProxyHosts>${proxy-no_proxy}</nonProxyHosts>
</proxy>
</proxies>
</settings>

假设 id 是代理的“配置文件名称”: 失败:由于您不希望默认使用代理,因此必须将 active 设置为 false。如果您将 active 排除在外,则默认为 true,并且会自动使用第一个事件代理。如果设置 active=false,-P work-one 不会打开代理。如果您将它们都设置为 active=true,那么无论如何都会使用第一个,如果您不在该代理后面,它将无法工作,并且在您在家时也无法工作。

Java 系统属性: 失败:有一些示例建议为代理设置 Java 系统属性,但是这些示例还声明它不适用于许多常见情况 maven 。它还会导致在命令行上输入大量内容,这是一种不太理想的情况。

Linux 脚本: 失败,不适用于 Windows:是的,我有一个 Linux 脚本可以为我使用的各种工具设置代理,但是该解决方案不适用于Windows,因此不是这个问题的答案。这也很尴尬,因为如果在您登录之前网络连接不正确,您最终会得到虚假的代理信息。 (修复网络、注销、重新登录、代理没问题,呃。)


中间结果: 答案似乎是没有 maven-ish 方法来处理这个,或者 settings.xml 文件中的一堆其他东西。因此,我目前无限期拒绝接受答案。

配置文件看起来最有可能解决这个问题,但是代理不是您可以在配置文件中输入的 block 之一 block ,mirrors 也不是(这是我遇到的其他东西,需要用三种方法来设置它)。

最佳答案

mvn 有一个 -s 开关

-s,--settings <arg>                    Alternate path for the user
settings file

我无法从命令提示符动态切换代理。所以我最终创建了 3 个单独的设置文件(每个代理一个),比​​如 work1-settings.xml、work2-settings.xml、settings.xml(用于家庭网络)。

我设置了 Windows 环境变量,例如

WORK1=-s c:\Users\coderplus\.m2\work1-settings.xml
WORK2=-s c:\Users\coderplus\.m2\work2-settings.xml

在家的时候,我会用

mvn clean install

(这将选择默认的 settings.xml 文件)

上类的时候,我会用

mvn clean install %WORK1%

工作时2,我会用

mvn clean install %WORK2%

关于maven - 选择在 Maven 中使用哪个代理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25942717/

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