根据位置配置Maven代理/服务器设置?

时间:2010-03-01 05:10:48

标签: maven-2 proxy settings profile mirror

所以我不确定实现这一目标的最佳方法是什么,但基本上我有一台笔记本电脑用于Maven项目。当我在工作时它工作正常,但是当我走出他们的公司代理和maven服务器的门时,我经常不得不做很多关于我settings.xml文件的手工捏造在家里,如果我不是VPN:

  • 我们有一个公司安装的Maven Repository代理服务器来存储我们自己的一些工件,并处理我们常用工件的中间人。
  • 我们有一个用于连接外部世界的http代理。

这两个配置都由我的settings.xml文件处理,用于设置single Nexus groupmaven proxies。如果我在离开办公室时没有连接到VPN,每次我不使用时都要使用settings.xml,然后在我使用时将其切换回来。

其他人发现了哪些解决方案可以解决这个问题?我一直在尝试使用配置文件来管理代理,但我似乎无法让它正常工作,并且它开始看起来很难看。当我在工作时不在代理后面并且不使用公司代理服务器或Maven服务器时,是否有一些可以检测的设置配置?

4 个答案:

答案 0 :(得分:9)

虽然我可以想到一些基于配置文件的解决方案来处理代理(基本上,从配置文件中定义的属性中读取<active>值),但这不是完全自动化的(profile activation不支持基于网络的东西)除非您根据您的位置找到存在或不存在的文件(在这种情况下,您可以使用现有/丢失的文件触发器,但这有点像hacky)。无论如何,这只能解决问题的一部分,因为无法在配置文件中声明镜像(请参阅MNG-3525)。

因此,我建议使用两个settings.xml并使用settings-home.xml命令行选项传递-s文件,而不是尝试使用配置文件来控制它。在家里。

另一种选择是使用脚本自动化settings.xml中的更改(如MNG-3525中报告的那样,Groovy将是一个不错的选择。)

答案 1 :(得分:6)

我发现使用环境变量将nonProxyHostsproxynoproxy shell别名一起设置为在使用代理的网络之间切换时最方便的解决方案。

settings.xml中,使用

配置代理
<host>proxy.corporation.int</host>
<port>8080</port>
<nonProxyHosts>${env.MAVEN_NONPROXY}</nonProxyHosts>

然后在~/.profile设置

export MAVEN_NONPROXY_PROXY='*.corporation.int|local.net|some.host.com'
export MAVEN_NONPROXY_NOPROXY='*'

alias proxy="export MAVEN_NONPROXY=\"$MAVEN_NONPROXY_PROXY\" && export all_proxy=http://proxy.corporation.int:8080"
alias noproxy="export MAVEN_NONPROXY=\"$MAVEN_NONPROXY_NOPROXY\" && unset all_proxy"


要在漫游时进行切换,您只需从shell执行:

[me@linuxbox me]$ proxy

[me@linuxbox me]$ noproxy

显然,别名proxynoproxy可以包含比MAVEN_NOPROXYall_proxy设置更多的更改。

答案 2 :(得分:3)

我对同样的问题感到沮丧:在网络之间漫游时必须手动编辑settings.xml。事实上,我编写了一个Maven插件,可以自动发现代理设置。当前实现使用Bernd Rosstauscher编写的proxy-vole库来检测基于操作系统配置,浏览器和环境设置的代理设置。

我刚刚在Apache 2.0许可下发布了Github上插件的源代码:https://github.com/volkertb/autoproxy-maven-plugin

欢迎您试一试,看看它是否符合您的需求。欢迎任何反馈或贡献!

(注意:您不一定要将插件添加到项目的POM中。您可以在安装后从命令行调用它。有关详细信息,请参阅站点上的README。)

答案 3 :(得分:0)

您可以在需要激活代理时设置MAVEN_OPTS

export MAVEN_OPTS="-Dhttp.proxyHost=my-proxy-server -Dhttp.proxyPort=80 -Dhttp.nonProxyHosts=*.my.org -Dhttps.proxyHost=my-proxy-server -Dhttps.proxyPort=80 -Dhttps.nonProxyHosts=*.my.org"