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

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

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

   myhttpproxy true http 192.168.1.2 3128 localhost   myhttpsproxy true https 192.168.1.2 3128 localhost   

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

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

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

如MNG-2305和MNG-4394等提出的Maven错误表明这个问题已经解决,但我不相信。

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

来自settings.xml的Maven代理用于http和https,因此您只需要定义一个代理服务器并将其用于两者,您只需要留下一个proxy标记,如下所示:

   myhttpproxy true http 192.168.1.2 3128 localhost   

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

没有额外的...httpsproxy...条目 (如@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! : – /

我想这是一个bug或重载/缓存问题。 我们成功地测试了它

  • 开普勒(4.3)和霓虹灯(4.6)
  • 和他们的嵌入式Maven版本(3.2.1 / 3.3.9)以及外部3.3.3
  • 使用http://https:// URL

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

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

这是我的证据:

文件说明了这一点

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

protocol ,host,port: 协议:// host:代理的端口 ,分隔成离散元素。“

2. 源代码更清晰:

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

3.真实世界测试(使用Eclipse Maven):

一个。 第一个代理是一个虚假的ftp,第二个是真正的http,第三个是真正的https。 结果:失败。

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

    bogus_ftp true ftp 123 bogus.proxy.com   real_http true http 123 real.proxy.com   real_https true https 123 real.proxy.com   

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

这表明它只使用了第一个代理。 否则,它会使用第二个代理进行https请求,点击伪代理服务器,然后失败。

    real_http true http 123 real.proxy.com   bogus_https true https 123 bogus.proxy.com   

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

这表明maven不使用多个代理,即使对于相同的协议也是如此。 否则,它会尝试第二个真正的代理并成功。

    bogus_http true http 123 bogus.proxy.com   real_http true http 123 real.proxy.com   

我不太确定,但根据MNG-4394的文档,他们支持通配符。 所以你可以试试

http|https

要么

 * 

它可能会奏效。