背景

  环境需要设置代理才能够访问外部网络,如果只是运行java程序来访问网络,我们可以通过java -jar test.jar -DproxyHost=proxy_ip -DproxyPort=proxy_port,但如果是java的maven项目中,单元测试需要访问网络,只执行mvn test则会导致单元测试的代码无法访问网络。

解决

  Maven单元测试,使用的是Surefire Maven插件。当Surefire插件fork JVM时,并不会继承所有的系统属性。因此我们可以通过命令行来如下设置属性。而网络代理也是属性之一。

mvn test -Dhttp.proxyHost=${url}  -Dhttp.proxyPort={port} -Dhttp.proxyUser=${user} -Dhttp.proxyPassword=${pass}

  其中,${url}、{port}、${user}和${pass}分别是代理服务器的地址、端口,代理用户和密码。