我在代理服务器后面使用Maven 3.1.1。相同的代理处理HTTP
和HTTPS
流量。
我似乎无法告诉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
中为HTTPS
和settings.xml
配置代理?我知道我可以通过将Java系统属性传递给maven调用来解决这个问题,例如:
-Dhttps.proxyHost=192.168.1.2 -Dhttps.proxyPort=3128
但肯定这可以在settings.xml
内完成吗?
如MNG-2305和MNG-4394提出的Maven错误表明此问题已得到解决,但我不相信。
或者,是否有一个“代理代理”我可以在本地运行,我可以指向maven? “代理代理”将相应地路由http / https。即便如此,我仍然需要在settings.xml
中为Maven定义两个活动代理定义,以指导两种类型的流量。
答案 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! : - / 强>
我猜这是一个错误或重载/缓存问题。 我们用
成功测试了它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。