2011-11-24 17 views
10

Estoy usando httpunit para acceder a un servidor.Maven + Surefire: configuración de proxy

Necesito configurar las configuraciones de proxy para esto (http y https).

Configuré la configuración en el archivo settings.xml, pero infalible parece ignorarlo?

Quiero evitar duplicar la configuración tanto como sea posible.

En la configuración del plugin segura I intentado:

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

y

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

y

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

y varias otras combinaciones.

puedo imprimir las propiedades del sistema en la unidad de prueba con:

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

Lo único que funcionó hasta el momento son valores explícitos, tales como:

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

o

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

Pero como dije, no quiero duplicar la configuración, si es posible.

¿Cómo puedo usar la configuración de proxy establecida en el archivo settings.xml en pruebas unitarias?

+0

¿Qué tal tener 'http.proxyHost' como' propiedad' en 'settings.xml'? Supongo que actualmente estás tratando de usar el valor de las configuraciones de 'proxy'. – Raghuram

Respuesta

1

El modo de horquilla del Maven Surefire plugin está predeterminado en "once". Sugiero configurar esto para "nunca" y luego intentar ejecutar la compilación de nuevo. Mi teoría aquí es que está perdiendo la propiedad del sistema porque el plugin Surefire está bifurcando una nueva JVM.

+0

Surefire "pierde" propiedades del sistema a propósito: pretende proporcionarle un entorno limpio para sus pruebas. – Anton

0

La edición del archivo settings.xml de Maven para agregar el proxy funcionó correctamente para mí. En Ubuntu y AWS Linux la ruta es /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

He resuelto que al proporcionar todas las configuraciones relacionadas con el proxy de Maven a través de las propiedades del sistema cuando sea necesario, además de algunos ajustes para detectar en tiempo de ejecución si esas configuraciones presentes en mis padres POM.

1) En entornos donde se requieren configuraciones proxy, cree el archivo RC para Maven ("~/.mavenrc" o "%PROFILE%\mavenrc_pre.bat") con MAVEN_OPTS adentro.Por ejemplo:

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

2) Detectar si se proporcionaran la configuración del proxy y construir argumentos a favor de éxito seguro:

<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) de aplicación preparadas a argumentos de éxito seguro y plugins de seguridad positiva:

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

Disfrute :)

Cuestiones relacionadas