我想分享我通过代理使用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使用代理服务器?
有关为Maven设置代理的详细信息,请参阅迷你指南.
基本上,您需要确保全局设置([maven install]/conf/settings.xml
)或用户设置(${user.home}/.m2/settings.xml
)中的代理部分配置正确.最好在用户设置中执行此操作,以避免将密码以纯文本格式存储在公共位置.
Maven 2.1引入了密码加密,但是我还没有检查加密是否适用于代理设置以及存储库密码(不明白为什么它不会).
有关信息,settings.xml中有一个注释掉的代理配置以及如何修改它的说明.
从迷你指南中,您的设置应如下所示:
[...] [...] true http proxy.somewhere.com 8080 proxyuser somepassword www.google.com|*.somewhere.com
如何使用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"
另请注意,一些插件(远程资源可以想到)使用一个非常老的库,它只接受通过MAVEN_OPTS的代理配置;
-Dhttp.proxyHost=-Dhttp.proxyPort= -Dhttps.proxyHost= -Dhttps.proxyPort=
你可能会被困在auth上.
我也有这个问题,我通过编辑.m2文件夹中的settings.xml文件解决了这个问题.我的settings.xml现在是这样的:
genproxy
true
http
proxyHost
3128
username
password
要设置Maven代理:
编辑〜/ .m2/settings.xml文件中的代理会话.如果找不到该文件,请创建一个.
httpproxy true http your-proxy-host your-proxy-port local.net|some.host.com httpsproxy true https your-proxy-host your-proxy-port local.net|some.host.com
要么
编辑{M2_HOME} /conf/settings.xml中的代理会话
希望能帮助到你.. :)
这些是由两个问题造成的:
您需要将代理配置添加到settings.xml.这是您的用户名字段中的一个技巧.确保它看起来像domain\username.在那里设置域并放置这个精确的斜线很重要'\'.如果您的密码包含非xml友好字符,则可能需要使用标记.
我注意到maven 2.2.0有时通过代理无法工作,2.2.1工作得非常好.
如果省略其中一些 - maven可能会失败并显示随机错误消息.
只是希望我已经拯救了一些人来搜索这个问题6个小时,就像我一样.
只是为了添加我自己的经验:我公司的代理是 http://webproxy.intra.companyname.com:3128
.要使maven通过此代理工作,设置必须与此完全相同
default true http webproxy.intra.companyname.com 3128
与其他一些代理配置文件不同,protocol
这里描述了如何连接代理服务器,而不是代理哪种协议.http
目标的一部分必须从主机名中拆分,否则它将无法工作.
谢谢@krosenvold.
如果设置文件更改不起作用,请在具有POM文件的命令提示符中尝试此操作.
mvn install -Dhttp.proxyHost=abcproxy -Dhttp.proxyPort=8080 -Dhttps.proxyHost=abcproxy -Dhttps.proxyPort=8080
密码更改后,这对我有所帮助.
我在cntlm
本地运行,配置了NTLMv2
密码哈希以与公司代理进行身份验证,并使用
export MAVEN_OPTS="-DproxyHost=127.0.0.1 -DproxyPort=3128"
使用来自的代理maven
。当然,您使用的代理应该支持cntlm
/ NTLMv2
。
并添加到这个主题,这是我的经验下面...真奇怪和耗时,所以我认为值得添加.
我在尝试在Windows上构建portlet-bridge时遇到了类似的问题,导致以下错误:
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设置为空,以便maven认为父级不是本地的.这是根据Hudson构建失败的 SO的建议:不可解析的父POM和在这个讨论论坛.这没有效果.
我还尝试确保我的settings.xml中明确列出了存储库,但这也没有效果.
然后我确保mvn被迫查找存储库,而不是依赖于它自己的历史,正如Sarthon在本博客中所讨论的那样.不幸的是,这也不是问题.
在一些绝望中,我重新访问了我的MAVEN_OPTS以确保我没有违反我的代理设置.这些都是正确的,尽管价值没有引用:
设置MAVEN_OPTS = -Dhttp.proxyHost = myproxy.mycompany.com -Dhttp.proxyPort = 8080 -Xmx256m
所以,最后,我将代理配置移动到我的settings.xml中,这有效:
genproxy
true
http
myproxy.mycompany.com
8080
*.mycompany.com|127.0.0.1
当settings.xml配置确实有效时,真的不确定为什么我的原始MAVEN_OPTS不起作用(引用?).我想扭转修复并再次检查每一步,但浪费了太多时间.将在何时报告.