2009-08-09 32 views
84

我想分享我通過代理使用maven的經驗。如何通過代理使用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 

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

+0

(任何人)把這個改爲一個實際的問題(如:我如何通過代理使用Maven?)?然後,您可以發佈您的問題主體作爲答案,以更直接與StackOverflow格式.. – Tim 2009-08-09 11:30:55

+0

我已經爲您改寫了它Bogdan,請發佈您的原始內容作爲答案,如果您願意 – 2009-08-09 11:44:27

+0

看起來像我們編輯在相同時間 – 2009-08-09 11:45:46

回答

11

那些最有可能造成2個問題:

  1. 你需要代理的配置添加到您的設置。 XML。這是您的用戶名字段中的一個技巧。確保它看起來像域\用戶名。在那裏設置域名,並把這個確切的斜線是重要的'\'。如果您的密碼包含非xml友好字符,您可能需要使用<![CDATA []] >標記。
  2. 我注意到maven 2.2.0有時無法通過代理工作,2.2.1的工作非常好。

如果其中的一些被省略 - 行家可能會失敗,並隨機錯誤信息。

只希望我已經保存了一些人在這個問題上搜索了6個小時,就像我一樣。

+0

您是否使用NTLM代理?從迷你指南:「請注意,由於它們尚未經過測試,因此不支持NTLM代理,您可能可以在JDK 1.4+上使用相關的系統屬性來完成此項工作。」 – 2009-08-09 11:46:57

+0

對此不確定。這是一個公司代理,實際上距離我600英里,系統管理人員本週末沒有任職。所以現在不能問任何人。這將是有趣的發現。我知道它支持http,socks和其他協議。也許它也是NTML。 – Bogdan 2009-08-09 11:55:11

103

對於建立一個Maven的代理的詳細信息,請參閱mini guide

本質上,您需要確保全局設置([maven install]/conf/settings.xml)或用戶設置(${user.home}/.m2/settings.xml)中的代理部分配置正確。最好在用戶設置中執行此操作,以避免在公共位置以純文本形式存儲密碼。

Maven 2.1介紹password encryption,但我沒有仔細檢查加密是否適用於代理設置以及存儲庫密碼(不知道爲什麼它不會)。

有關信息,有一個在您的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> 
+0

謝謝,但這篇文章是一個提示,而不是一個問題。 我已經解決了這個問題,但花費了太多時間在非顯而易見的事情上。我發佈這個,以便它可能對某人有用。 – Bogdan 2009-08-09 11:46:47

+7

無法在m2目錄中找到setting.xml文件。任何想法爲什麼? @賣方 – Ariox66 2015-07-18 16:18:02

+3

你必須把它放在那裏。你可以從maven_home找到一個示例settings.xml,這是你解壓maven二進制文件的位置。 – 2016-10-21 19:42:22

4

我知道這不是一個真正的問題的答案,但它可能是值得知道的人搜索這篇文章。也可以安裝一個像nexus這樣的Maven倉庫代理。

你的Maven將被配置成聯繫當地的Nexus代理,然後會的Nexus檢索(和緩存)的工件。它可以通過Web界面進行配置,並支持(http)代理)。

這可能是一種優勢,尤其是在公司的設置,因爲文物在本地使用,可以下載速度快,你是不是依賴外部Maven倉庫的可用性了。

要回到問題; Nexus的代理配置有一個很好的GUI,它只需要在一個地方完成,而不是每個開發人員。

35

How to use a socks proxy?

建立一個SSH隧道某處的服務器:

ssh -D $PORT [email protected]$SERVER 

的Linux(慶典):

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

的Windows:

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

通過'MAVEN_OPTS'使用socks代理是我可以讓Maven通過HTTPS下載的唯一方法。使用HTTP或HTTPS代理,通過'MAVEN_OPTS'或'settings.xml',產生 'org.apache.maven.wagon.providers.http.httpclient.impl.execchain.RetryExec執行 信息:I/O異常java.net.SocketException)在處理請求到{tls}時被捕獲 - > http://proxy.mycompany.com:911-> https://repo.maven.apache.org:443:SOCKS:TTL已過期' – 2016-12-08 03:07:22

6

,並添加到th是主題,這裏是我的經驗...真奇怪,耗時,所以我認爲值得添加。

我也曾有過類似的問題,試圖建立的門戶橋在Windows上,得到了以下錯誤:

 
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認爲父級不是本地的。這是根據對SO的建議Hudson build fail: Non-resolvable parent POMin this nabble forum。這沒有效果。

  • 我也嘗試確保存儲庫明確列在我的settings.xml中,但這也沒有效果。

  • 然後,我確保mvn被迫查找存儲庫,而不是依靠它自己的歷史記錄,如this blog by 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> 

真的不知道爲什麼而settings.xml的配置確實W¯¯我原來MAVEN_OPTS不能正常工作(行情?)掃。我想扭轉修復方法並再次檢查每一步,但浪費了太多時間。將會在什麼時候回報。

+0

Did你實際上在MAVEN_OPTS中指定了一個用戶名和密碼? – bcmoney 2012-12-04 17:48:05

+1

我不認爲我這樣做,但後來我不需要爲我的代理服務器。正如你所看到的,這是可能的。除了安全問題,你可以試試看。我收集你仍然有問題有這麼遠嗎? – wmorrison365 2012-12-05 09:47:43

17

我也有這個問題,我通過編輯我的.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> 
11

還要注意,一些插件(遠程資源浮現在腦海)使用僅接受通過MAVEN_OPTS代理服務器配置一個真正的老圖書館;

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

你可能會被卡在auth上。

+0

在Ubuntu 14.04上使用maven 3.0.5從Ubuntu存儲庫中工作對我來說不起作用。在settings.xml文件中配置代理工作。 – 2015-09-10 22:58:56

+1

在Ubuntu 14.04上使用Maven 3.0.4爲我工作 – rmv 2016-03-30 14:36:02

+0

需要以這種方式設置MAVEN_OPTS的示例是使用Maven從源代碼構建Maven。沒有MAVEN_OPTS,儘管下載了許多JAR,但它無法下載LICENSE-2.0。 – Permaquid 2017-03-31 19:42:05

0

除了上面提到的技術,通過一些努力,你可以通過代理使用jproxyloader庫運行maven(在頁面上有如何做到這一點的示例:http://jproxyloader.sourceforge.net/)。這允許設置襪子代理僅用於下載工件。

在duanni提到的解決方案(設置-DsocksProxyHost)中有一個問題。如果您有針對本地數據庫運行的集成測試(或者連接到不應通過代理的url的其他測試)。這些測試將停止工作,因爲與數據庫的連接也將被定向到代理。在jProxyLoader的幫助下,您可以爲nexus主機設置代理。另外如果你想要,你可以通過另一個代理傳遞連接到數據庫。

0

上述貼子有助於解決我的問題。除了上述我不得不作出以下修改,使其工作:

  • 修改Maven的JRE網設置(\ JRE \ LIB \ net.properties)使用系統代理設置。 https.proxyHost =代理DNS https.proxyPort =代理端口

    • 包括在settings.xml中的代理服務器設置。我沒有提供使用NTLM身份驗證的用戶名和密碼設置。
9

我想補充我自己的經歷與此:我公司的代理是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> 

不像其他一些代理的配置文件,這裏介紹如何連接到代理服務器,沒有哪種協議應該被代理。目標的http部分必須從主機名中分離出來,否則它將無法工作。

+0

在這個時候,我剛剛經歷了相反的嘗試。這裏的協議是描述哪個協議應該使用這個代理。我剛剛實現了通過使用 https 2016-02-09 15:40:58

+0

配置https協議代理連接到http代理謝謝!這對我有用!我有「http://」前置,它會失敗 – 2018-01-12 21:02:00

1

如果maven通過代理工作,但不是它正在調用的某些插件,請嘗試設置JAVA_TOOL_OPTIONS以及-Dhttp*.proxy*設置。

如果您已經JAVA_OPTS只是做

export JAVA_TOOL_OPTIONS=$JAVA_OPTS 
7

要設置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的代理會話

希望它有助於.. :)

0

感謝@krosenvold。

如果設置文件更改無效,請在具有POM文件的命令提示符下嘗試此操作。

E:\的myproject> MVN安裝-Dhttp.proxyHost = abcproxy -Dhttp.proxyPort = 8080 -Dhttps.proxyHost = abcproxy -Dhttps.proxyPort = 8080

這一個密碼更改後,立即幫助了我。