2011-11-24 21 views
10

私はhttpunitを使ってサーバーにアクセスしています。Maven + Surefire:プロキシ設定

これ(httpとhttps)のプロキシ設定を構成する必要があります。

設定をsettings.xmlファイルに設定しましたが、確実に無視されるようです。

可能な限り構成を複製しないようにしたいと思います。

<systemPropertyVariables> 
    <http.proxyHost>${http.proxyHost}</http.proxyHost> 
</systemPropertyVariables> 

<argLine>-Dhttp.proxyHost=${http.proxyHost}</argLine> 

<argLine>-Dhttp.proxyHost=${settings.proxies[protocol=http].host}</argLine> 

および他のいくつかの組み合わせ:私が試した確実なプラグイン構成で

私はユニットテストのシステムプロパティを印刷:

<systemPropertyVariables> 
    <http.proxyHost>myProxy</http.proxyHost> 
</systemPropertyVariables> 

又は

<argLine>-Dhttp.proxyHost=myProxy</argLine> 

:これまで働いた唯一のもののような明示的な値である

for (String propertyName : new TreeSet<String>(System.getProperties().stringPropertyNames())){ 
     System.out.println(propertyName + ": " + System.getProperty(propertyName)); 
    } 

しかし、私が言ったように、私は可能なら構成を複製したくありません。

単体テストのsettings.xmlファイルで設定されているプロキシ設定を使用するにはどうすればよいですか?

+0

'settings.xml'に' http.proxyHost'を 'property'として持つのはどうですか?私は現在、 'proxy'設定値を使用しようとしていると思います。 – Raghuram

答えて

1

Maven SurefireプラグインのforkModeのデフォルト値は "once"です。私はこれを「決して」設定しないでビルドをやり直すことをお勧めします。ここでの私の理論は、Surefireプラグインが新しいJVMをフォークしているため、システムプロパティを失っているということです。

+0

シュアファイアは、意図的にシステムプロパティを "失う" - テストのためのきれいな環境を提供するふりをします。 – 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("~/.mavenrc"または"%PROFILE%\mavenrc_pre.bat")のRCファイルを作成します。

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> 

お楽しみください:)

関連する問題