如何通过代理服务器使用Maven?(How do I use Maven through a pro

2019-06-18 05:41发布

我想分享我通过代理使用maven的经验。

你最有可能面临的异常和消息,如:

repository metadata for: 'org.apache.maven.plugins' could not be retrieved from 
repository: central due to an error: Error transferring file: Connection refused: connect

要么

[WARNING] Failed to retrieve plugin descriptor for org.apache.maven.plugins:maven-clean-
plugin:2.5: Plugin org.apache.maven.plugins:maven-clean-plugin:2.5 or one of its 
dependencies could not be resolved: Failed to read artifact descriptor for 
org.apache.maven.plugins:maven-clean-plugin:jar:2.5

如何配置Maven使用代理服务器?

Answer 1:

对于建立一个Maven的代理的详细信息,请参阅微型导轨 。

从本质上讲,你需要确保在全局设置中的代理部分( [maven install]/conf/settings.xml ),或用户设置( ${user.home}/.m2/settings.xml )配置是否正确。 这是更好地做到这一点在你的用户设置,以避免采用明文存储密码在一个公共场所。

Maven的2.1引入了密码加密 ,但我还没有得到全面检查,如果加密适用于代理设置以及存储库的密码(不明白为什么它不会虽然)。

对于信息,有一个在您的settings.xml和指令的注释掉的代理配置如何修改它。

从迷你指南,您的设置应该是这个样子:

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                  http://maven.apache.org/xsd/settings-1.0.0.xsd">
[...]
  <proxies>
    <proxy>
      <active>true</active>
      <protocol>http</protocol>
      <host>proxy.somewhere.com</host>
      <port>8080</port>
      <username>proxyuser</username>
      <password>somepassword</password>
      <nonProxyHosts>www.google.com|*.somewhere.com</nonProxyHosts>
    </proxy>
  </proxies>
[...]
</settings>


Answer 2:

如何使用socks代理?

建立一个SSH隧道到服务器的地方:

ssh -D $PORT $USER@$SERVER

Linux操作系统(bash)的:

export MAVEN_OPTS="-DsocksProxyHost=127.0.0.1 -DsocksProxyPort=$PORT"

视窗:

set MAVEN_OPTS="-DsocksProxyHost=127.0.0.1 -DsocksProxyPort=$PORT"


Answer 3:

我也有这个问题,我在我的文件夹中的.m2编辑settings.xml文件解决它。 我的settings.xml是现在这个样子:

<settings>
  <proxies>
    <proxy>
      <id>genproxy</id>
      <active>true</active>
      <protocol>http</protocol>
      <host>proxyHost</host>
      <port>3128</port>
      <username>username</username>
      <password>password</password>
    </proxy>
 </proxies>
</settings>


Answer 4:

还要注意的是一些插件(远程资源浮现在脑海)使用仅接受通过MAVEN_OPTS代理服务器配置一个真正的老图书馆;

-Dhttp.proxyHost=<host> -Dhttp.proxyPort=<port> -Dhttps.proxyHost=<host> -Dhttps.proxyPort=<port>

你可能会停留在身份验证这一个。



Answer 5:

要设置Maven的代理

编辑你的〜/ .m2目录/ settings.xml文件中的代理服务器会话。 如果你不能找到该文件,创建一个。

<settings>
<proxies>
    <proxy>
        <id>httpproxy</id>
        <active>true</active>
        <protocol>http</protocol>
        <host>your-proxy-host</host>
        <port>your-proxy-port</port>
        <nonProxyHosts>local.net|some.host.com</nonProxyHosts>
    </proxy>
<proxy>
        <id>httpsproxy</id>
        <active>true</active>
        <protocol>https</protocol>
        <host>your-proxy-host</host>
        <port>your-proxy-port</port>
        <nonProxyHosts>local.net|some.host.com</nonProxyHosts>
    </proxy>

</proxies>
</settings>

要么

编辑您的{M2_HOME} /conf/settings.xml的代理会议

希望能帮助到你.. :)



Answer 6:

我想补充我自己的经历与此:我公司的代理是http://webproxy.intra.companyname.com:3128 。 对Maven通过这个代理工作,设置必须完全一样

<settings>
  <proxies>
    <proxy>
      <id>default</id>
      <active>true</active>
      <protocol>http</protocol>
      <host>webproxy.intra.companyname.com</host>
      <port>3128</port>
    </proxy>
  </proxies>
</settings>

不像其他一些代理的配置文件,该protocol在这里介绍了如何连接到代理服务器,而不是哪种协议应该被代理。 该http目标的一部分,必须从主机名分裂出去,否则将无法正常工作。



Answer 7:

那些最有可能造成2个问题:

  1. 您需要将代理配置添加到您的settings.xml。 下面是你的用户名外地一招。 确保它看起来像域\用户名。 有设置域和把这种精确的斜杠是重要的“\”。 您可能需要使用<![CDATA []]>标记,如果您的密码包含非XML型人物。
  2. 我注意到的maven 2.2.0不通过代理有时在所有的工作,其中2.2.1工作完全正常。

如果其中的一些被省略 - 行家可能会失败,并随机错误信息。

只是希望我已经从解决此问题,谷歌搜索6小时,像我一样救别人。



Answer 8:

谢谢@krosenvold。

如果设置文件的更改不起作用,试试这个在具有POM文件中的命令提示符。

mvn install -Dhttp.proxyHost=abcproxy -Dhttp.proxyPort=8080 -Dhttps.proxyHost=abcproxy -Dhttps.proxyPort=8080

这一个密码更改后,立即帮助了我。



Answer 9:

并加入到这个话题,我这里还有我的经验,下面...非常奇怪和耗时的,所以我认为这是值得加入。

我也曾有过类似的问题,尝试在Windows内置的portlet的桥梁,得到了以下错误:

Downloading: http://repo1.maven.org/maven2/org/apache/portals/bridges-pom/1.0/bridges-pom-1.0.pom
[DEBUG] Reading resolution tracking file C:\Documents and Settings\myuser\.m2\repository\org\apache\portals\bridges-pom\1.0\bridges-pom-1.0.pom.lastUpdated
[DEBUG] Writing resolution tracking file C:\Documents and Settings\myuser\.m2\repository\org\apache\portals\bridges-pom\1.0\bridges-pom-1.0.pom.lastUpdated
[ERROR] The build could not read 1 project -> [Help 1]
org.apache.maven.project.ProjectBuildingException: Some problems were encountered while processing the POMs:
[FATAL] Non-resolvable parent POM: Could not transfer artifact
org.apache.portals:bridges-pom:pom:1.0 from/to central (http://repo1.maven.org/maven2): Error transferring file: repo1.maven.org and 'parent.relativePath' points at wrong local
POM @ line 23, column 11
...
[ERROR]   The project org.apache.portals.bridges:portals-bridges-common:2.0 (H:\path_to_project\portals-bridges-common-2.0\pom.xml) has 1 error
[ERROR]     Non-resolvable parent POM: Could not transfer artifact org.apache.portals:bridges-pom:pom:1.0 from/to central (http://repo1.maven.org/maven2):
Error transferring file: repo1.maven.org and 'parent.relativePath' points at wrong local POM @ line 23, column 11: Unknown host repo1.maven.org -> [Help 2]
...
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/ProjectBuildingException
[ERROR] [Help 2] http://cwiki.apache.org/confluence/display/MAVEN/UnresolvableModelException

我试了几件事情,下面有点冲浪:

  • 试图设置parent.relativePath为空,以便行家没想到父母是本地的。 这是因为每个建议对SO在哈德森建立失败:非解析父POM ,并在此nabble论坛 。 这是没有效果的。

  • 我也试过确保库中的settings.xml我被明确列出,但这个没有任何影响。

  • 然后我保证MVN被迫查找存储库,而不是依赖于它自己的历史,讨论通过Sarthon这个博客 。 不幸的是,这不是问题,无论是。

  • 在一些无奈之下,我再重新审视我的MAVEN_OPTS,以确保我没有落下的我的代理服务器设置犯规。 这是正确的,尽管不带引号的值:

    设置MAVEN_OPTS = -Dhttp.proxyHost = myproxy.mycompany.com -Dhttp.proxyPort = 8080 -Xmx256m

  • 所以,最后,我搬到代理配置到我的settings.xml和这工作:

    <proxies>
      <proxy>
        <id>genproxy</id>
        <active>true</active>
        <protocol>http</protocol>
        <!--username>proxyuser</username-->
        <!--password>proxypass</password-->
        <host>myproxy.mycompany.com</host>
        <port>8080</port>
        <nonProxyHosts>*.mycompany.com|127.0.0.1</nonProxyHosts>
      </proxy>
    </proxies>

真的不知道为什么我原来MAVEN_OPTS不能正常工作(行情?),而settings.xml中配置没有工作。 我想扭转固定,并再次检查每一个步骤,但也浪费了太多的时间。 将报告到什么时候。



Answer 10:

我知道这是不是一个真正的问题的答案,但它可能是值得知道的人搜索这个职位。 也可以安装像Maven仓库代理关系 。

你的Maven将被配置成联系当地的Nexus代理,然后会的Nexus检索(和缓存)的工件。 它可以通过一个网络接口被配置,并且具有用于(HTTP)代理)的支持。

这可能是一种优势,尤其是在公司的设置,因为文物在本地使用,并且可以快速下载,您不依赖外部Maven仓库的可用性了。

要链接到的问题; 使用Nexus没有为代理配置提供了很好的图形界面,它需要在一个地方做而已,而不是每一个开发人员。



Answer 11:

我跑cntlm localy,与配置NTLMv2密码哈希值与企业的代理,并使用认证

export MAVEN_OPTS="-DproxyHost=127.0.0.1 -DproxyPort=3128"

使用该代理的maven 。 当然,你应该使用支持代理cntlm / NTLMv2



Answer 12:

如果行家致力于通过代理,但不是有些正在调用的插件,可以尝试设置JAVA_TOOL_OPTIONS以及与-Dhttp*.proxy*设置。

如果您已经JAVA_OPTS只是做

export JAVA_TOOL_OPTIONS=$JAVA_OPTS


Answer 13:

除上述提到的技术,具有一定的努力,你可以使用jproxyloader库通过代理运行Maven(有例如页面上如何做到这一点: http://jproxyloader.sourceforge.net/ )。 这允许设置socks代理只下载文物。

在通过duanni提到溶液(设定-DsocksProxyHost)有一个问题。 如果你对本地数据库运行的集成测试(或连接到URL不应该通过代理去另一个测试)。 这些测试将停止工作,因为数据库连接也将被引导到代理。 随着jProxyLoader的帮助,您可以只为纽带主机设置代理。 此外,如果你愿意,你可以通过其他代理传递到数据库连接。



Answer 14:

你需要一些时间来添加其他<proxy></proxy>在协议标签标签,并指定https: <protocol>https</protocol>



Answer 15:

上述帖子帮助解决我的问题。 除了上述我不得不作出以下修改,使其工作:

  • 修改Maven的JRE网设置(\ JRE \ LIB \ net.properties)使用系统代理设置。

     https.proxyHost=proxy DNS https.proxyPort=proxy port 
  • Settings.XML中包含的代理服务器设置。 我没有提供用户名和密码设置为使用NTLM身份验证。



文章来源: How do I use Maven through a proxy?
标签: maven proxy