我正在尝试将maven配置为在访问特定存储库时使用socks代理,但不要将其用于maven中央存储库。
我最初使用export MAVEN_OPTS="-DsocksProxyHost=<proxyHost> -DsocksProxyPort=<proxyPort>"
设置代理,但在尝试从repo.maven.apache.org/maven2下载依赖项时获取Malformed reply from SOCKS server
。
我还尝试将以下内容添加到settings.xml,而不是$MAVEN_OPTS
:
<proxies>
<proxy>
<active>true</active>
<protocol>http</protocol>
<host><proxyHost></host>
<port><proxyPort></port>
<nonProxyHosts>repo.maven.apache.org</nonProxyHosts>
</proxy>
</proxies>
并且还使用SOCKS作为协议。但是,这会导致请求超时,因为它无法到达特定的存储库。但是,它确实到达repo.maven.apache.org/maven2,虽然它在第一次检查指定的存储库时很慢。
有没有办法合并这两个并拥有我在settings.xml中指定的存储库的SOCKS代理,而没有repo.maven.apache.org的代理?
答案 0 :(得分:0)
你应该将协议设置为socks5,就像这样(我的设置):
<proxy>
<id>ss</id>
<active>true</active>
<protocol>socks5</protocol>
<username></username>
<password></password>
<host>127.0.0.1</host>
<port>1080</port>
<nonProxyHosts>127.0.0.1</nonProxyHosts>
</proxy>
答案 1 :(得分:0)
对于任何在这个问题上苦苦挣扎的人,我要说另一种解决方法。
虽然似乎将<proxy>
添加到settings.xml应该是最正确的解决方案,但对我而言却不起作用。
首先,创建与代理服务器的SSH连接。您可以使用任何喜欢的服务(例如Shadowsocks),但这是最简单的解决方案:
ssh -D 9999 yourname@your.gateway.com
这将启动到服务器的ssh会话,并且还会在端口9999上启动Socks代理。如果正在使用SSH连接连接的服务器上执行此操作,则可能要在screen
会话下运行此代码,您可以在袜子仍在后台连接的情况下继续使用终端。
现在,当您要构建工件时,可以使用以下方法:
-DsocksProxyHost=127.0.0.1 -DsocksProxyPort=9999
此行代码使用本地端口9999上的Socks连接到您的服务器。示例:
mvn clean install -DsocksProxyHost=127.0.0.1 -DsocksProxyPort=8085
此外,您也可以将其导出到您的环境中:
export MAVEN_OPTS="-DsocksProxyHost=127.0.0.1 -DsocksProxyPort=8085"
答案 2 :(得分:0)
我知道现在有点晚了,但是对于仍然有这个问题的人。这是您可以通过袜子代理调用Maven的方式:
mvn install -DproxySet=true -DsocksProxyHost=YOUR_SOCKS_SERVER -DsocksProxyPort=SOCKS_PORT