2011-11-24 15 views
10

Używam httpunit, aby uzyskać dostęp do serwera.Maven + Surefire: konfiguracja proxy

Potrzebuję skonfigurować ustawienia proxy dla tego (http i https).

Ustawiam konfigurację w pliku settings.xml, ale chyba wydaje się, że to jest ignorowanie!

Chcę uniknąć duplikowania konfiguracji tak bardzo, jak to możliwe.

W konfiguracji wtyczki murowany Próbowałem:

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

i

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

i

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

i kilka innych kombinacji.

wydrukować właściwości systemu w badanej jednostki z:

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

Jedyną rzeczą, która działała do tej pory są wyraźne wartości, takie jak:

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

lub

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

Ale jak już powiedziałem, nie chcę duplikować konfiguracji, jeśli to możliwe.

Jak mogę użyć ustawień proxy ustawionych w pliku settings.xml w testach jednostkowych?

+0

Co powiesz na "http.proxyHost" jako 'własność' w' settings.xml'? Chyba obecnie próbujesz użyć wartości ustawień "proxy". – Raghuram

Odpowiedz

1

Maven Surefire wtyczka's forkMode domyślnie "raz". Sugerowałbym ustawienie tego na "nigdy", a następnie ponowne uruchomienie kompilacji. Moja teoria polega na tym, że tracisz własność systemu, ponieważ wtyczka Surefire jest rozwidleniem nowej maszyny JVM.

+0

Surefire "traci" właściwości systemu celowo - udaje, że zapewnia czyste środowisko do testów. – Anton

0

Edytowanie pliku settings.xml Mavena w celu dodania serwera proxy działa poprawnie. W Ubuntu i AWS Linux ścieżka jest /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

Rozwiązałem to przez dostarczenie wszystkich ustawień związanych z proxy do Maven poprzez właściwości systemu, gdy są potrzebne, plus kilka poprawek do wykrycia w czasie wykonywania, jeśli ustawienia te obecne w moim rodzicem POM.

1) W środowiskach, w których wymagane są ustawienia proxy, utwórz plik RC dla Maven ("~/.mavenrc" lub "%PROFILE%\mavenrc_pre.bat") z MAVEN_OPTS w środku.Na przykład:

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

2) wykrywają, czy ustawienia proxy zostały dostarczone i budować argumenty za murowany:

<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) Zastosowanie przygotowane argumenty murowany i Failsafe wtyczki:

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

Enjoy :)

Powiązane problemy