Maven使用SOCKS代理进行特定的回购

时间:2015-12-14 12:46:39

标签: maven proxy socks

我正在尝试将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的代理?

3 个答案:

答案 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