18

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

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

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

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

4

4 回答 4

10

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

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

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

于 2010-03-01T13:45:23.947 回答
8

我发现使用环境变量与shell 别名nonProxyHosts一起设置是在使用代理和不使用代理的网络之间切换时最方便的解决方案。proxynoproxy

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

于 2015-12-09T11:07:52.030 回答
3

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

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

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

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

于 2014-11-05T23:37:29.677 回答
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"
于 2018-06-18T10:43:18.060 回答