我正在使用httpunit访问服务器。
我需要为此配置代理设置(http和https)。
我在settings.xml文件中设置了配置,但是确定似乎忽略了它!?
我想避免尽可能多地复制配置。
在surefire插件配置中,我尝试了:
<systemPropertyVariables>
<http.proxyHost>${http.proxyHost}</http.proxyHost>
</systemPropertyVariables>
和
<argLine>-Dhttp.proxyHost=${http.proxyHost}</argLine>
和
<argLine>-Dhttp.proxyHost=${settings.proxies[protocol=http].host}</argLine>
以及其他几种组合。
我在单元测试中打印系统属性:
for (String propertyName : new TreeSet<String>(System.getProperties().stringPropertyNames())){
System.out.println(propertyName + ": " + System.getProperty(propertyName));
}
到目前为止,唯一有效的是显式值,例如:
<systemPropertyVariables>
<http.proxyHost>myProxy</http.proxyHost>
</systemPropertyVariables>
或
<argLine>-Dhttp.proxyHost=myProxy</argLine>
但正如我所说,如果可能,我不想复制配置。
如何在单元测试中使用settings.xml文件中设置的代理设置?
答案 0 :(得分:3)
我通过在需要时通过系统属性向Maven提供所有与代理相关的设置解决了这一问题,并在运行时检测了一些调整,如果这些设置存在于我的父POM中。
1)在需要代理设置的环境中,为Maven("~/.mavenrc"
或"%PROFILE%\mavenrc_pre.bat"
)创建RC文件,其中包含MAVEN_OPTS
。例如:
set MAVEN_OPTS=-Dhttp.proxyHost=10.0.1.250 -Dhttp.proxyPort=3128 -Dhttp.nonProxyHosts="localhost|*.local|*.mylab.com"
2)检测是否提供了代理设置并为Surefire构建参数:
<plugin>
<groupId>org.codehaus.gmaven</groupId>
<artifactId>groovy-maven-plugin</artifactId>
<version>2.0</version>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>execute</goal>
</goals>
</execution>
</executions>
<configuration>
<source>
<![CDATA[
// Collect proxy settings to use in Surefire and Failsafe plugins
def settings = "";
System.properties.each { k,v ->
if ( k.startsWith("http.") || k.startsWith("https.") )
{
// We have to escape pipe char in 'nonProxyHosts' on Windows
if (System.properties['os.name'].toLowerCase().contains('windows'))
v = v.replaceAll( "\\|", "^|" );
settings += "-D$k=$v ";
}
}
project.properties["proxy.settings"] = settings;
]]>
</source>
</configuration>
</plugin>
3)在Surefire和Failsafe插件中使用准备好的参数:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<argLine>${proxy.settings}</argLine>
<redirectTestOutputToFile>true</redirectTestOutputToFile>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<argLine>${proxy.settings}</argLine>
<redirectTestOutputToFile>true</redirectTestOutputToFile>
</configuration>
</plugin>
享受:)
答案 1 :(得分:1)
Maven Surefire插件的forkMode默认为“一次”。我建议将其设置为“never”,然后尝试再次运行构建。我的理论是你丢失了系统属性,因为Surefire插件正在分配一个新的JVM。
答案 2 :(得分:0)
编辑Maven的settings.xml文件以便为我添加代理正常工作。在Ubuntu和AWS Linux中,路径为/var/lib/jenkins/tools/hudson.tasks.Maven_MavenInstallation/maven/conf
<!-- proxy
| Specification for one proxy, to be used in connecting to the network.
|
<proxy>
<id>optional</id>
<active>true</active>
<protocol>http</protocol>
<username>proxyuser</username>
<password>proxypass</password>
<host>proxy.host.net</host>
<port>80</port>
<nonProxyHosts>local.net|some.host.com</nonProxyHosts>
</proxy>
-->