2011-11-24 19 views
10

Sto usando httpunit per accedere a un server.Maven + Surefire: configurazione proxy

Devo configurare le impostazioni proxy per questo (http e https).

Ho impostato la configurazione nel file settings.xml, ma surefire sembra ignorarlo !?

Voglio evitare di duplicare la configurazione il più possibile.

Nella configurazione del plugin infallibile ho provato:

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

e

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

e

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

e diverse altre combinazioni.

ho stampare le proprietà di sistema nel test di unità con:

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

L'unica cosa che ha funzionato finora sono valori espliciti quali:

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

o

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

Ma come ho detto, non voglio duplicare la configurazione, se possibile.

Come è possibile utilizzare le impostazioni del proxy impostate nel file settings.xml nei test unitari?

+0

Che ne dici di avere 'http.proxyHost' come' proprietà' in 'settings.xml'? Immagino che tu stia cercando di usare il valore delle impostazioni 'proxy'. – Raghuram

risposta

1

Il fork del plug-in Maven Surefire è impostato su "una volta". Suggerirei di impostarlo su "never" e quindi provare a eseguire di nuovo la build. La mia teoria qui è che stai perdendo la proprietà del sistema perché il plugin Surefire sta foraggiando una nuova JVM.

+0

Surefire "perde" di fatto le proprietà di sistema - finge di fornirti l'ambiente pulito per i tuoi test. – Anton

0

Modifica del file settings.xml di Maven per aggiungere il proxy funzionato correttamente per me. In Ubuntu e AWS Linux il percorso è /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

ho risolto che, fornendo tutte le impostazioni proxy relative a Maven tramite le proprietà del sistema in caso di necessità, oltre ad alcuni ritocchi per rilevare in runtime se tali impostazioni presenti nel mio genitore POM.

1) Negli ambienti in cui sono richieste le impostazioni proxy, creare file RC per Maven ("~/.mavenrc" o "%PROFILE%\mavenrc_pre.bat") con MAVEN_OPTS all'interno.Per esempio:

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

2) Rilevare se sono state fornite le impostazioni proxy e costruire argomenti per infallibile:

<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) Utilizzare preparato argomenti a infallibile e plugin fail-safe:

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

Godetevi :)

Problemi correlati