所以我不确定实现这一目标的最佳方法是什么,但基本上我有一台笔记本电脑用于Maven项目。当我在工作时它工作正常,但是当我走出他们的公司代理和maven服务器的门时,我经常不得不做很多关于我settings.xml
文件的手工捏造在家里,如果我不是VPN:
这两个配置都由我的settings.xml
文件处理,用于设置single Nexus group和maven proxies。如果我在离开办公室时没有连接到VPN,每次我不使用时都要使用settings.xml,然后在我使用时将其切换回来。
其他人发现了哪些解决方案可以解决这个问题?我一直在尝试使用配置文件来管理代理,但我似乎无法让它正常工作,并且它开始看起来很难看。当我在工作时不在代理后面并且不使用公司代理服务器或Maven服务器时,是否有一些可以检测的设置配置?
答案 0 :(得分:9)
虽然我可以想到一些基于配置文件的解决方案来处理代理(基本上,从配置文件中定义的属性中读取<active>
值),但这不是完全自动化的(profile activation不支持基于网络的东西)除非您根据您的位置找到存在或不存在的文件(在这种情况下,您可以使用现有/丢失的文件触发器,但这有点像hacky)。无论如何,这只能解决问题的一部分,因为无法在配置文件中声明镜像(请参阅MNG-3525)。
因此,我建议使用两个settings.xml
并使用settings-home.xml
命令行选项传递-s
文件,而不是尝试使用配置文件来控制它。在家里。
另一种选择是使用脚本自动化settings.xml
中的更改(如MNG-3525中报告的那样,Groovy将是一个不错的选择。)
答案 1 :(得分:6)
我发现使用环境变量将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
设置更多的更改。
答案 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"