首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择在maven中使用哪个代理?

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

Stack Overflow用户
提问于 2014-09-19 21:37:18
回答 1查看 1.7K关注 0票数 3

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

代码语言:javascript
复制
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)如何在命令行中指定使用哪个代理。

假设如下:

代码语言:javascript
复制
<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>

实际上有三种情况。

  • Office :在您需要使用工作的地方-一个代理。
  • 第二办公室:在你需要使用工作的地方--两个代理。
  • 主页:不需要代理的地方。

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

  1. 如何在settings.xml中编写代理条目以支持通过系统属性或命令行开关选择代理?
  2. 如何设置系统属性或命令行开关来选择所需的代理?
  3. 当你在家的时候你怎么关掉所有的代理?
  4. 实现(1)、(2)和(3),而无需每次移动时编辑settings.xml。
  5. 建议的解决方案必须同时适用于Linux和Windows。
  6. 建议的解决方案应尽可能减少命令行类型。

已经尝试了失败的

使用配置文件设置属性,然后在代理中使用:失败:抱怨nonProxyHosts中的regexp错误和端口中的非整数错误,尽管配置文件是通过-P参数在命令行中声明的,而配置文件声明在代理声明之前。请参阅1608079,它对我不起作用,如果它确实有效,您将如何指定任何代理呢?

代码语言:javascript
复制
% 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是这样的:

代码语言:javascript
复制
<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也不是(这是我遇到的另一种情况,需要有三种方法来设置它)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-19 22:39:07

mvn有一个-s交换机

代码语言:javascript
复制
-s,--settings <arg>                    Alternate path for the user
                                        settings file

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

我设置了Windows环境变量,如

代码语言:javascript
复制
WORK1=-s c:\Users\coderplus\.m2\work1-settings.xml
WORK2=-s c:\Users\coderplus\.m2\work2-settings.xml

在家的时候,我会用

代码语言:javascript
复制
mvn clean install

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

在work1,我会用

代码语言:javascript
复制
mvn clean install %WORK1%

在work2,我会用

代码语言:javascript
复制
mvn clean install %WORK2%
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25942717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档