2011-11-24 102 views
10

我正在使用httpunit訪問服務器。Maven + Surefire:代理配置

我需要爲此(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

如何在'settings.xml'中將'http.proxyHost'作爲'property'?我想現在你正在嘗試使用'proxy'設置值。 – Raghuram

回答

1

Maven Surefire插件的forkMode默認爲「once」。我會建議將其設置爲「never」,然後嘗試再次運行構建。我的理論是,你正在失去系統屬性,因爲Surefire插件分叉了一個新的JVM。

+0

Surefire有意「疏忽」系統屬性 - 它假裝爲您提供測試的乾淨環境。 – Anton

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> 
--> 
3

我解決了通過提供所有代理相關的設置在需要的時候通過系統屬性Maven的,再加上一些調整,以在運行時檢測是否存在於我的父POM這些設置。

1)在環境中需要代理設置,與MAVEN_OPTS內部創建對Maven(RC文件"~/.mavenrc""%PROFILE%\mavenrc_pre.bat")。例如:

set MAVEN_OPTS=-Dhttp.proxyHost=10.0.1.250 -Dhttp.proxyPort=3128 -Dhttp.nonProxyHosts="localhost|*.local|*.mylab.com" 

2)檢測如果提供了代理服務器設置,並建立論據神火:

<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)使用準備在神火參數和故障保護插件:

<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> 

享受:)