【发布时间】:2010-08-30 14:50:35
【问题描述】:
我正在使用带有 Gnome 的 Ubuntu,我可以在其中设置网络代理设置(带有身份验证)。
问题是:如何在命令行中运行 maven 并让它使用这个代理?
【问题讨论】:
标签: maven-2
我正在使用带有 Gnome 的 Ubuntu,我可以在其中设置网络代理设置(带有身份验证)。
问题是:如何在命令行中运行 maven 并让它使用这个代理?
【问题讨论】:
标签: maven-2
你看过http://maven.apache.org/guides/mini/guide-proxies.html吗?
在您的 settings.xml 中:
<settings>
.
.
<proxies>
<proxy>
<active>true</active>
<protocol>http</protocol>
<host>proxy.somewhere.com</host>
<port>8080</port>
<username>proxyuser</username>
<password>somepassword</password>
<nonProxyHosts>www.google.com|*.somewhere.com</nonProxyHosts>
</proxy>
</proxies>
.
.
</settings>
注意:这不会影响 Java 代码!这些代理设置是 Maven 存储库代理设置。
【讨论】:
有一个java.net.useSystemProxies 系统属性可以设置为true(在Windows 和Linux 平台上)来告诉JVM 使用系统代理设置。来自Java Networking and Proxies 指南:
在详细了解如何编写这样的
ProxySelector之前,让我们先谈谈默认的。 J2SE 5.0 提供了强制向后兼容性的默认实现。换句话说,默认的ProxySelector将检查前面描述的系统属性以确定使用哪个代理。但是,有一个新的可选功能:在最新的 Windows 系统和 Gnome 2.x 平台上,可以告诉默认ProxySelector使用系统代理设置(Windows 和 Gnome 2.x 的最新版本都允许您通过其用户界面全局设置代理)。如果系统属性java.net.useSystemProxies设置为true(为了兼容性,默认设置为false),那么默认ProxySelector将尝试使用这些设置。您可以在命令行上设置该系统属性,也可以编辑 JRE 安装文件lib/net.properties,这样您只需在给定系统上更改一次即可。
但这仅适用于java.net.* 类,不适用于commons-httpclient、jsch 等。所以这并不能解决整个问题,Maven 并不真正支持它(这被记录为MNG-728 )。
换句话说,恐怕您必须在~/.m2/settings.xml 中配置代理设置。
【讨论】:
需要通过命令行设置这些设置的可以使用以下:
MAVEN_CLI_OPTS: "-DproxySet=true -Dhttp.proxyHost=yourProxyHost -Dhttp.proxyPort=9999 -Dhttp.nonProxyHosts=mvnrepository.com"
用法:
mvn $MAVEN_CLI_OPTS test
警告: 在 CI 环境中使用 nonProxyHosts 属性时,我无法正常工作。我怀疑这可能是因为管道字符在 Gitlab 的 YAML 语法中没有被正确解释,但我没有找到解决这个问题的方法。
来源:https://confluence.atlassian.com/jirakb/java-option-http-nonproxyhosts-does-not-work-214863640.html
【讨论】:
MAVEN_OPTS 变量,则无需将其显式传递给mvn 命令,因为它会自动使用。
-Dhttps. 版本(因为它确实是通过 HTTPS 连接的)在 linux、JRE8、mvn 3.6.3 上为我工作
在 Netbeans 中,您必须从 Tools-> option->java->Maven 中删除 -Djava.net.useSystemProxies=true。删除它后,Maven 会从 settings.xml 读取代理设置。
【讨论】: