我在用Maven 3.x。我知道如何在.m2/setings.xml文件中配置代理。我无法搞清楚的是,如何指定在命令行上或通过某些系统属性使用哪些代理。此注释出现在maven.apache.org提供的示例maven.apache.org中:
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的注释(上面)是正确的,我的任务是寻找满足以下条件的解决方案:
已经尝试了失败的
使用配置文件设置属性,然后在代理中使用:失败:抱怨nonProxyHosts中的regexp错误和端口中的非整数错误,尽管配置文件是通过-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 out,则默认为true,并且自动使用第一个活动代理。如果您设置了active=false,则-P work-one不会打开代理。如果您将它们都留给active=true,那么第一个将被使用,如果您不在该代理后面,它将无法工作,并且当您在家时也不会工作。
Java:失败:有一些示例建议为代理设置系统属性,但是这些示例还指出,它不适用于在maven中常见的许多情况。这还会导致在命令行上输入大量内容,这是不太理想的情况。
Linux脚本:失败,不适用于:是的,我有一个Linux脚本,它将为我使用的各种工具设置代理,但是该解决方案不适用于,因此不能回答这个问题。这也是很尴尬的,因为如果网络在登录之前没有正确连接,你就会得到虚假的代理信息。(修复网络,注销,重新登录,代理正常,嗯。)
临时结果:的答案似乎是,没有任何方法来处理这个问题,或者settings.xml文件中的其他一些事情。因此,我目前正在无限期地拒绝接受一个答案。
配置文件看起来是最有可能解决这个问题的地方,但是proxies不是您可以在profile块中输入的块之一,mirrors也不是(这是我遇到的另一种情况,需要有三种方法来设置它)。
发布于 2014-09-19 22:39:07
mvn有一个-s交换机
-s,--settings <arg> Alternate path for the user
settings file我无法从命令提示符中动态切换代理。因此,我最终创建了3个单独的设置文件(每个代理一个),比如Work1-setings.xml、work2-setings.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文件)
在work1,我会用
mvn clean install %WORK1%在work2,我会用
mvn clean install %WORK2%https://stackoverflow.com/questions/25942717
复制相似问题