[英]How to configure a proxy server for both HTTP and HTTPS in Maven's settings.xml?
我在代理服务器后面使用 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 的settings.xml
中同时为HTTP
和HTTPS
配置代理? 我知道我可以通过将 Java 系统属性传递给 maven 调用来解决这个问题,例如:
-Dhttps.proxyHost=192.168.1.2 -Dhttps.proxyPort=3128
但这肯定可以从settings.xml
实现吗?
提出的 Maven 错误(例如MNG-2305和MNG-4394 )表明此问题已解决,但我不相信。
或者,是否有一个“代理代理”我可以在本地运行,我可以指向 maven? “代理代理”将相应地路由 http/https。 即便如此,我仍然需要在settings.xml
中定义两个活动代理定义,以便 Maven 引导这两种类型的流量。
来自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>
上面的协议是代理服务器的协议,而不是代理请求。
它没有额外的...<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! : - /
我想这是一个bug或重载/缓存问题。 我们成功地测试了它
http://
和https://
URL 我使用Eclipse Maven进行的测试表明, settings.xml
中的protocol
是指代理服务器的协议,而不是URL请求的协议。 它还显示Maven仅使用列出的第一个活动代理服务器,并忽略其余部分。
这是我的证据:
文件说明了这一点
active :如果此代理处于活动状态,则为true。 这对于声明一组代理很有用,但一次只能有一个代理。
protocol ,host,port: protocol:// 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”,并且失败了。
<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>
湾 第一个代理是真正的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>
我解决了更新maven版本的问题,换句话说,不是使用嵌入式eclipse maven版本,而是使用外部版本3.3.9。
对于带有M2E 1.16.1的Eclipse 4.17 (2020-09) (以及它应该特别适用于那里的重点! )和Maven 3.3.3(外部)或 3.6.3(嵌入式) (以及可能类似的组合/版本),它适用于混合http://...
和https://...
具有以下设置的 repo URL (过去除外):
例如使其适用于settings.xml
或pom.xml
:
<url> https://repo.maven.apache.org/maven2 </url>
<url> http://my-local-repo/repository/rep1 </url>
<url> http://my-local-sonatype-nexus-repo-manager-oss-v3/repository/rep2 </url>
你需要:
您的<usr-home>/.m2/settings.xml
中的两个条目,如果某些存储库具有http://
和一些https://
URL(不幸的是,不像文档或旧 Maven 或 m2e 版本/组合中所述)
<proxy> <id>http</id> <active>true</active> <protocol>http</protocol> <port>8080</port> <host>some-proxy.com</host> </proxy> <proxy> <id>https</id> <!-- important!: different id than above! --> <active>true</active> <protocol>https</protocol> <port>8080</port> <host>some-proxy.com</host> </proxy>
另外 Eclipse M2E 插件存在根本不同步的问题,如果
Window -> Preferences -> Maven -> [x] 启动时下载存储库索引更新未启用(=> 因此可以将其视为:“ [x] 启用存储库索引更新(另外在启动时) ” )
此外,一些 repos ,例如已知的 Sonatype 的Nexus Repository Manager v3(至少 3.2),不支持索引(另见功能请求 NEXUS-17279 ),因此至少有两个选项:
<repo-base-url>/repX/.index/nexus-maven-repository-index.properties
存在
为了确保不会遇到缓存或崩溃问题,您应该重新启动 Eclipse(例如,使用-clean
选项) ,以防在上述设置后某些东西无法立即工作
当然,如果没有索引,将失去在 repo 工件中搜索的能力,但直接下载应该始终有效。
pom.xml
-> 右键单击 -> Maven -> 添加依赖项 -> 输入 groupId, artifactId ...
groovy
应该有相当多的建议如果它有效,否则可能会显示一些artifactId cannot be empty 警告
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.