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

Maven 2 是否根据位置配置Maven代理/服务器设置?,maven-2,proxy,settings,profile,mirror,Maven 2,Proxy,Settings,Profile,Mirror,所以我不确定实现这一点的最佳方式是什么,但基本上我有一台笔记本电脑,我在Maven项目中使用它。当我在工作时,它工作得很好,但当我走出他们公司代理和maven服务器的大门时,如果我不在家,我经常不得不手工修改settings.xml文件: 我们有一个公司安装的Maven Repository代理服务器来存储我们自己的一些工件,并处理作为我们常用工件的中间人的问题 我们有一个http代理,用于连接外部世界 这两种配置都由我的settings.xml文件处理,用于设置和。如果我不在办公室的时候没

所以我不确定实现这一点的最佳方式是什么,但基本上我有一台笔记本电脑,我在Maven项目中使用它。当我在工作时,它工作得很好,但当我走出他们公司代理和maven服务器的大门时,如果我不在家,我经常不得不手工修改
settings.xml
文件:

  • 我们有一个公司安装的Maven Repository代理服务器来存储我们自己的一些工件,并处理作为我们常用工件的中间人的问题
  • 我们有一个http代理,用于连接外部世界
这两种配置都由我的
settings.xml
文件处理,用于设置和。如果我不在办公室的时候没有连接到VPN,每次我不使用settings.xml时,我都必须使用它,然后在使用它时将其切换回来


其他人找到了什么解决方案来处理这个问题?我一直在尝试管理代理,但我似乎无法让它正常工作,它开始看起来很难看。是否有一些设置配置可以检测我在工作时不支持代理,不使用公司代理服务器或Maven服务器?

而我可以想出一些基于配置文件的解决方案来处理代理(基本上,阅读
不支持基于网络的内容)除非您可以根据您的位置找到一个存在或不存在的文件(在这种情况下,您可以使用现有/缺少的文件触发器,但这有点黑客)。无论如何,这只能解决问题的一部分,因为镜像不能在概要文件中声明(请参阅)

因此,我的建议是使用两个
settings.xml
并在家时使用
-s
命令行选项将
settings.xml
文件传递给home.xml,而不是试图通过配置文件来控制这一点


另一个选择是使用脚本自动更改
settings.xml
(Groovy将是一个不错的选择,正如有人在中报告的那样)。

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

我刚刚在Github上发布了该插件的源代码,使用Apache 2.0许可证:

欢迎您尝试一下,看看它是否满足您的需求。欢迎任何反馈或贡献


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

我发现使用环境变量设置
非代理主机
以及
代理
noproxy
外壳别名是在有代理和无代理的网络之间切换时最方便的解决方案

settings.xml
中,使用

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

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

[me@linuxbox me]$ proxy


显然,两个别名
proxy
noproxy
都可以包含比设置
MAVEN\u noproxy
all\u proxy

更多的更改,您可以在需要激活代理时设置
MAVEN\u 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"
[me@linuxbox me]$ noproxy
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"