如何通過代理使用Maven ?

[英]How do I use Maven through a proxy?


I want to share my experience of using maven through a proxy.

我想通過一個代理來分享我使用maven的經驗。

You would most likely face exceptions and messages like:

你很可能會遇到這樣的情況:

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

or

[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

How to configure Maven to use proxy server?

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

13 个解决方案

#1


111  

For details of setting up a proxy for Maven, see the mini guide.

有關設置Maven的代理的詳細信息,請參閱“迷你指南”。

Essentially you need to ensure the proxies section in either the global settings ([maven install]/conf/settings.xml), or user settings (${user.home}/.m2/settings.xml) is configured correctly. It is better to do this in your user settings to avoid storing the password in plain text in a public location.

實際上,您需要確保在全局設置([maven安裝]/conf/settings.xml)或用戶設置(${user.home}/.m2/settings.xml)中正確配置了代理部分。最好在用戶設置中這樣做,以避免在公共場所的純文本中存儲密碼。

Maven 2.1 introduced password encryption, but I've not got round to checking if the encryption applies for the proxy settings as well as repository passwords (don't see why it wouldn't though).

Maven 2.1引入了密碼加密,但我還沒有檢查加密是否適用於代理設置和存儲庫密碼(不知道為什么不這樣做)。

For info, there is a commented-out proxy configuration in your settings.xml and instructions on how to modify it.

對於info,在您的設置中有一個經過注釋的代理配置。xml和如何修改它的說明。

From the mini-guide, your settings should look something like this:

從迷你指南中,你的設置應該是這樣的:

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

#2


36  

How to use a socks proxy?

如何使用socks代理?

Set up a SSH tunnel to a server somewhere:

設置SSH通道到服務器某處:

ssh -D $PORT $USER@$SERVER

Linux (bash):

Linux(bash):

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

Windows:

窗口:

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

#3


18  

I also had this problem, and I solved it by editing the settings.xml file in my .m2 folder. My settings.xml is like this now:

我也有這個問題,我通過編輯設置來解決它。xml文件在我的。m2文件夾。我的設置。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>

#4


12  

Also note that some plugins (remote-resources comes to mind) use a really old library that only accepts proxy configuration through MAVEN_OPTS;

還要注意的是,有些插件(遠程資源)使用的是一個真正的舊庫,它只通過MAVEN_OPTS接受代理配置;

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

You might be stuck on auth for this one.

你可能會被困在這里。

#5


11  

Those are caused most likely by 2 issues:

這些都是由兩個問題引起的:

  1. You need to add proxy configuration to your settings.xml. Here's a trick in your username field. Make sure it looks like domain\username. Setting domain there and putting this exact slash is important '\'. You might want to use <![CDATA[]]> tag if your password contains non xml-friendly characters.
  2. 您需要將代理配置添加到您的settings.xml中。這是你的用戶名字段中的一個技巧。確保它看起來像域\用戶名。在那里設置定義域並將這個精確的斜杠設置為重要的“\”。您可能需要使用標簽,如果您的密碼包含非xml友好的字符。
  3. I've noticed maven 2.2.0 does not work sometimes through a proxy at all, where 2.2.1 works perfectly fine.
  4. 我注意到maven 2.2.0有時根本不通過代理來工作,在那里2.2.1工作得非常好。

If some of those are omitted - maven could fail with random error messages.

如果其中一些被省略了,maven可能會因為隨機的錯誤消息而失敗。

Just hope I've saved somebody from googling around this issue for 6 hours, like I did.

我希望我能像我一樣,在這個問題上用谷歌搜索6個小時。

#6


9  

Just to add my own experiences with this: my company's proxy is http://webproxy.intra.companyname.com:3128. For maven to work via this proxy, the settings have to be exactly like this

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

Unlike some other proxy-configuration files, the protocol here describes how to connect to the proxy server, not which kinds of protocol should be proxied. The http part of the target has to be split off from the hostname, else it won't work.

與其他一些代理配置文件不同,這里的協議描述了如何連接到代理服務器,而不是應該使用哪種協議。目標的http部分必須從主機名分離,否則它不會工作。

#7


7  

To set Maven Proxy :

設置Maven代理:

Edit the proxies session in your ~/.m2/settings.xml file. If you cant find the file, create one.

在~/.m2/設置中編輯代理會話。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>

or

Edit the proxies session in your {M2_HOME}/conf/settings.xml

在您的{M2_HOME}/conf/settings.xml中編輯代理會話。

Hope it Helps.. :)

希望它能幫助. .:)

#8


6  

And to add to this topic, here're my experiences below... Really odd and time consuming so I thought it was worth adding.

為了增加這個話題,下面是我的一些經驗。真的很奇怪,很費時間,所以我覺得應該加上。

I've had a similar problem trying to built the portlet-bridge on Windows, getting the following errors:

我遇到過類似的問題,試圖在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

I tried a couple of things, following a bit of surfing:

我嘗試了幾樣東西,在沖浪之后:

  • Tried to set the parent.relativePath as empty so that maven didn't think the parent was local. This is as per the suggestion on SO at Hudson build fail: Non-resolvable parent POM and in this nabble forum. This had no effect.

    試圖設置父進程。相對路徑為空,因此maven不認為父節點是本地的。這是根據在Hudson構建失敗的建議:不可解析的父POM和在這個nabble論壇。這沒有影響。

  • I also tried ensuring the repository was explicitly listed in my settings.xml but this had no effect either.

    我還嘗試確保在我的設置中明確列出了存儲庫。但這也沒有效果。

  • I then ensured mvn was forced to lookup the repository, rather than rely on it's own history, as discussed in this blog by Sarthon. Unfortunately, this wasn't the issue either.

    然后,我確保mvn被迫查找存儲庫,而不是依賴於它自己的歷史,這是Sarthon在本博客中討論的。不幸的是,這也不是問題所在。

  • In some desperation, I then revisited my MAVEN_OPTS to ensure I wasn't falling foul of my proxy settings. These were correct, albeit with the value unquoted:

    在一些絕望中,我重新訪問了我的MAVEN_OPTS,以確保我沒有違反我的代理設置。這些都是正確的,盡管其價值未被引用:

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

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

  • So, finally, I moved the proxy config into my settings.xml and this worked:

    最后,我將代理配置移動到我的設置中。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>

Really not sure why my original MAVEN_OPTS wasn't working (quotes?) while the settings.xml config did work. I'd like to reverse the fix and check each step again but have wasted too much time. Will report back as and when.

真的不知道為什么我最初的MAVEN_OPTS在設置時不起作用(引號?)xml配置工作。我想要倒車,檢查每一步,但是浪費了太多時間。將會在何時返回。

#9


4  

I know this is not really an answer to the question, but it might be worth knowing for someone searching this post. It is also possible to install a Maven repository proxy like nexus.

我知道這並不是一個真正的答案,但是對於搜索這個帖子的人來說,這可能是值得的。還可以安裝Maven存儲庫代理(如nexus)。

Your maven would be configured to contact the local Nexus proxy, and Nexus would then retrieve (and cache) the artifacts. It can be configured through a web interface and has support for (http) proxies).

您的maven將被配置為聯系本地的Nexus代理,然后Nexus將檢索(並緩存)工件。它可以通過web接口進行配置,並支持(http)代理。

This can be an advantage, especially in a company setting, as artefacts are locally available and can be downloaded fast, and you are not that dependent on the availability of external Maven repositories anymore.

這可能是一個優勢,特別是在公司設置中,因為artefacts是本地可用的,並且可以快速下載,而且您不再依賴外部Maven存儲庫的可用性。

To link back to the question; with Nexus there is a nice GUI for the proxy configuration, and it needs to be done on one place only, and not for every developer.

鏈接回到問題;對於代理配置來說,有一個很好的GUI,需要在一個地方完成,而不是每個開發人員。

#10


1  

If maven works through proxy but not some of the plugins it is invoking, try setting JAVA_TOOL_OPTIONS as well with -Dhttp*.proxy* settings.

如果maven通過代理工作,而不是它所調用的一些插件,那么嘗試設置JAVA_TOOL_OPTIONS和-Dhttp*。代理設置。

If you have already JAVA_OPTS just do

如果您已經有JAVA_OPTS,那么就做吧。

export JAVA_TOOL_OPTIONS=$JAVA_OPTS

#11


1  

Thanks @krosenvold.

謝謝@krosenvold。

If the settings file changes don't work, try this in the command prompt having the POM file.

如果設置文件更改不起作用,請在命令提示符中使用POM文件。

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

This has helped me immediately after a password change.

這幫我在密碼修改后立即得到了幫助。

#12


0  

Except for techniques mentioned above, with some effort, you can run maven through proxy using jproxyloader library (there is example on page how to do this: http://jproxyloader.sourceforge.net/). This allows set up socks proxy only for downloading artifacts.

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

In solution mentioned by duanni (setting -DsocksProxyHost) there is one problem. If you have integration tests running against local database (or another tests connecting to url which should not go via proxy). These tests will stop working because connections to database will also be directed to proxy. With help of jProxyLoader you can set up proxy only for nexus host. Additionally if you want you can pass connections to database through another proxy.

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

#13


0  

The above postings helped in resolving my problem. In addition to the above I had to make the following changes to make it work :

上面的帖子幫助我解決了問題。除此之外,我還需要做以下的修改:

  • Modified Maven's JRE net settings(\jre\lib\net.properties) to use system proxy setting. https.proxyHost= proxy DNS https.proxyPort=proxy port

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

    • Included proxy server settings in settings.xml. I did not provide username and password settings as to use NTLM authentication.
    • 在settings.xml中包含代理服務器設置。我沒有提供使用NTLM身份驗證的用戶名和密碼設置。

注意!

本站翻译的文章,版权归属于本站,未经许可禁止转摘,转摘请注明本文地址:https://www.itdaan.com/blog/2009/08/09/730210b5d574aabc101cdf9c0f619f59.html



 
粤ICP备14056181号  © 2014-2021 ITdaan.com