如何在Maven的settings.xml中为HTTP和HTTPS配置代理服务器?

时间:2015-06-24 16:34:43

标签: java maven http https proxy

我在代理服务器后面使用Maven 3.1.1。相同的代理处理HTTPHTTPS流量。

我似乎无法告诉maven使用settings.xml来使用这两种协议。在我看来,只能使用一个活动代理,因为首先使用的是最先定义的活动代理,并忽略后续的“活动”代理定义。这是我的settings.xml

<proxies>
    <proxy>
        <id>myhttpproxy</id>
        <active>true</active>
        <protocol>http</protocol>
        <host>192.168.1.2</host>
        <port>3128</port>
        <nonProxyHosts>localhost</nonProxyHosts>
    </proxy>
    <proxy>
        <id>myhttpsproxy</id>
        <active>true</active>
        <protocol>https</protocol>
        <host>192.168.1.2</host>
        <port>3128</port>
        <nonProxyHosts>localhost</nonProxyHosts>
    </proxy>
</proxies>

是否可以在maven的HTTP中为HTTPSsettings.xml配置代理?我知道我可以通过将Java系统属性传递给maven调用来解决这个问题,例如:

-Dhttps.proxyHost=192.168.1.2 -Dhttps.proxyPort=3128

但肯定这可以在settings.xml内完成吗?

MNG-2305MNG-4394提出的Maven错误表明此问题已得到解决,但我不相信。

或者,是否有一个“代理代理”我可以在本地运行,我可以指向maven? “代理代理”将相应地路由http / https。即便如此,我仍然需要在settings.xml中为Maven定义两个活动代理定义,以指导两种类型的流量。

4 个答案:

答案 0 :(得分:34)

来自settings.xml的Maven代理用于http和https,所以你只需要定义一个代理服务器并将它用于两者,你只需要留下一个proxy标签,就像这样:

<proxies>
    <proxy>
        <id>myhttpproxy</id>
        <active>true</active>
        <protocol>http</protocol>
        <host>192.168.1.2</host>
        <port>3128</port>
        <nonProxyHosts>localhost</nonProxyHosts>
    </proxy>
</proxies>

上述协议是代理服务器的协议,而不是代理请求。

答案 1 :(得分:2)

在没有额外的 ...<id>httpsproxy</id>...条目(正如@KrzysztofKrasoń所提到的)和它(正如提问者所述)的情况下工作。 对我们来说问题是, Eclipse->Maven->User Settings->[x] Update Settings 显然根本不起作用,并且必须检查某些事情Eclipse->Maven->[x] Download repository index updates on startup(例如Maven Repositories View->Global Repositories->central->Update Index)。最重要的是:

每次settings.xml次更新后都必须重新启动Eclipse! : - /

我猜这是一个错误或重载/缓存问题。 我们用

成功测试了它
  • 开普勒(4.3)和霓虹灯(4.6)
  • 及其嵌入式Maven版本(3.2.1 / 3.3.9)以及外部版本 3.3.3
  • 包含http://https://个网址

答案 2 :(得分:1)

我在Eclipse Maven上进行的测试表明,protocol中的settings.xml是指代理服务器的协议,而不是 URL请求的协议< / strong>。它还显示Maven仅使用列出的第一个活动代理服务器,而忽略其余的服务器。

这是我的证据:

1。 documentation

  

活动:如果此代理处于活动状态,则为true。这对于声明一组代理很有用,但是一次只能激活一个代理。

     

协议,主机,端口:代理的 protocol:// host:port ,分为多个独立的元素。”

2。 source code更加清晰:

    /**
     * Get the protocol of the proxy server.
     * @return the protocol of the proxy server
     */
    public String getProtocol()
    {
        return protocol;
    }

3。实际测试(使用Eclipse Maven):

a。第一个代理是伪造的ftp,第二个是真实的http,第三个是真实的https。结果:失败。

如果该协议用于URL请求,那么Maven会查找真正的http / https代理,并且工作得很好。相反,它使用了第一个代理,即使它是“ ftp”,也失败了。

    <proxies>
        <proxy>
            <id>bogus_ftp</id>
            <active>true</active>
            <protocol>ftp</protocol>
            <port>123</port>
            <host>bogus.proxy.com</host>
        </proxy>
        <proxy>
            <id>real_http</id>
            <active>true</active>
            <protocol>http</protocol>
            <port>123</port>
            <host>real.proxy.com</host>
        </proxy>
        <proxy>
            <id>real_https</id>
            <active>true</active>
            <protocol>https</protocol>
            <port>123</port>
            <host>real.proxy.com</host>
        </proxy>
    </proxies>

b。第一个代理是真实的http,第二个是伪造的https。结果:成功。

这表明它仅使用了第一个代理。否则,它将使用第二个代理来处理https请求,打假的代理服务器,然后失败。

    <proxies>
        <proxy>
            <id>real_http</id>
            <active>true</active>
            <protocol>http</protocol>
            <port>123</port>
            <host>real.proxy.com</host>
        </proxy>
        <proxy>
            <id>bogus_https</id>
            <active>true</active>
            <protocol>https</protocol>
            <port>123</port>
            <host>bogus.proxy.com</host>
        </proxy>
    </proxies>

c。两者都是http,但是第一个代理是假的,第二个是真实的。结果:失败。

这表明即使对于同一协议,maven也不使用多个代理。否则,它将尝试使用第二个真实代理并成功。

    <proxies>
        <proxy>
            <id>bogus_http</id>
            <active>true</active>
            <protocol>http</protocol>
            <port>123</port>
            <host>bogus.proxy.com</host>
        </proxy>
        <proxy>
            <id>real_http</id>
            <active>true</active>
            <protocol>http</protocol>
            <port>123</port>
            <host>real.proxy.com</host>
        </proxy>
    </proxies>

答案 3 :(得分:0)

我解决了更新maven版本的问题,换句话说,不是使用嵌入式eclipse maven版本,而是使用外部版本3.3.9。