【问题标题】:Make Maven Proxy/Server settings configurable based on location?使 Maven 代理/服务器设置可根据位置进行配置?
【发布时间】:2010-03-01 05:10:48
【问题描述】:
所以我不确定实现这一点的最佳方法是什么,但基本上我有一台笔记本电脑,用于 Maven 项目。当我在工作时它工作得很好,但是当我走出他们的公司代理和 maven 服务器的门时,当我在家时,我经常不得不对settings.xml 文件进行大量的手工操作如果我没有使用 VPN:
- 我们有一个公司安装的 Maven 存储库代理服务器来存储我们自己的一些工件并处理我们常用工件的中间人。
- 我们有一个用于连接外部世界的 http 代理。
这两种配置都由我的settings.xml 文件处理,用于设置single Nexus group 和maven proxies。如果我不在办公室时没有连接到 VPN,我每次不使用时都必须使用 settings.xml,然后在使用时将其切换回来。
其他人找到了哪些解决方案来处理这个问题?我一直在尝试使用配置文件来管理代理,但我似乎无法让它正常工作,而且它开始看起来很丑陋。是否有一些设置配置可以检测当我不在工作中的代理后面并且不使用公司代理服务器或 Maven 服务器?
【问题讨论】:
标签:
maven-2
proxy
settings
profile
mirror
【解决方案1】:
虽然我可以想到一些基于配置文件的解决方案来处理代理(基本上,从配置文件中定义的属性中读取 <active> 值),但这不会完全自动化(profile activation 不支持网络基于的东西)除非您可以根据您的位置找到存在或不存在的文件(在这种情况下,您可以使用现有/丢失的文件触发器,但这有点hacky)。无论如何,这只能解决问题的一部分,因为无法在配置文件中声明镜像(请参阅MNG-3525)。
因此,我的建议是使用两个settings.xml,并在您在家时使用-s 命令行选项传递您的settings-home.xml 文件,而不是尝试使用配置文件来控制它。
p>
另一种选择是使用脚本自动更改您的settings.xml(正如MNG-3525 中有人报告的那样,Groovy 将是一个不错的选择)。
【解决方案2】:
我发现使用环境变量设置nonProxyHosts 以及proxy 和noproxy 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
显然,proxy 和 noproxy 两个别名都可以包含比 MAVEN_NOPROXY 和 all_proxy 的设置更多的更改。
【解决方案3】:
我对同样的问题感到沮丧:在网络之间漫游时必须手动编辑 settings.xml。事实上,我写了一个 Maven 插件,可以自动发现代理设置。当前实现使用 Bernd Rosstauscher 编写的 proxy-vole 库来检测基于操作系统配置、浏览器和环境设置的代理设置。
我刚刚在 Apache 2.0 许可下在 Github 上发布了该插件的源代码:https://github.com/volkertb/autoproxy-maven-plugin
欢迎您试一试,看看它是否满足您的需求。欢迎任何反馈或贡献!
(注意:您不必将插件添加到项目的 POM 中。您也可以在安装后从命令行调用它。有关详细信息,请参阅站点上的 README。)
【解决方案4】:
需要激活代理时可以设置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"