2012-01-17 14 views
10

Leí en maven-surefire-plugin and default locale que Maven ejecuta pruebas bifurcadas y, por lo tanto, podría perder cualquier configuración regional que haya configurado.Establecer plugin surefire Configuración regional en el archivo Maven pom

¿Hay alguna manera de ejecutar pruebas en Maven en modo bifurcado y aún conservar la configuración regional?

- EDITAR -

Por lo tanto, para aclarar un poco: Es totalmente posible configurar el idioma y la región en Propiedades del sistema usando:

<systemPropertyVariables> 
    <user.language>en</user.language> 
    <user.region>GB</user.region> 
</systemPropertyVariables> 

y que en realidad se pasan al proceso en ejecución . Sin embargo, esto no establece la configuración regional en consecuencia; la configuración regional permanece como predeterminada del sistema.

+0

¿Ha intentado establecer 'user.country' en lugar de' user.region'? –

+0

El país de configuración no funciona. Lo establece como una propiedad del sistema muy bien, no afecta la configuración regional de ninguna manera. – JHollanti

+0

La documentación de Sun [1] dice: "En segundo lugar, en algunas implementaciones de Java en tiempo de ejecución, el usuario de la aplicación puede anular la configuración regional predeterminada del host proporcionando esta información en la línea de comando configurando user.language, user.country y user. variantes de propiedades del sistema ". Entonces, ¿qué JVM estás usando? [1] http://java.sun.com/developer/technicalArticles/J2SE/locale/ –

Respuesta

2

no tengo una forma de probar esto, pero darle una oportunidad:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.9</version> 
    <configuration> 
     <project> 
      <properties> 
       <user.language>en</user.language> 
       <user.region>GB</user.region> 
      </properties> 
     </project> 
     <includes> 
      <include>**/*Test.java</include> 
     </includes> 
     <forkMode>pertest</forkMode> 
    </configuration> 
</plugin> 

EDIT: OK intente esto:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.9</version> 
    <configuration> 
     <systemPropertyVariables> 
      <user.language>en</user.language> 
      <user.region>GB</user.region> 
     </systemPropertyVariables> 
     <includes> 
      <include>**/*Test.java</include> 
     </includes> 
     <forkMode>pertest</forkMode> 
    </configuration> 
</plugin> 
+0

No, no funciona. Ni siquiera establece las Propiedades del sistema. – JHollanti

+0

Ok, nueva configuración publicada –

+0

Esta establece propiedades del sistema muy bien. La configuración regional permanece predeterminada. Gracias por el esfuerzo sin embargo. – JHollanti

2

La configuración regional predeterminada de la aplicación es determinado de tres maneras Primero, a menos que haya cambiado explícitamente el valor predeterminado, el método getDefault() devuelve la configuración regional que inicialmente se determinó mediante la máquina virtual Java (JVM) cuando se cargó por primera vez. Es decir, la JVM determina la configuración regional predeterminada del entorno de host. La configuración regional del entorno host está determinada por el sistema operativo del host y las preferencias del usuario establecidas en ese sistema.

Segunda, en algunas implementaciones Java de tiempo de ejecución, el usuario de la aplicación puede anular regional predeterminada del huésped, proporcionando esta información en la línea de comandos mediante el establecimiento de la user.language, user.country y sistema user.variant propiedades. [Source]

creo que usted es una víctima de la primera parte, por lo segundo nunca tiene la oportunidad.

En su lugar, lo que puede hacer es en su unidad de prueba (o tal vez una clase base del mismo) establece la configuración regional predeterminada mediante programación como se indica más adelante en el mismo texto:

En tercer lugar, la aplicación puede llamar a la setDefault(Locale aLocale) método. El método setDefault(Locale aLocale) permite que su aplicación establezca un recurso para todo el sistema. Después de establecer la configuración regional predeterminada con este método , las llamadas subsiguientes a Locale.getDefault() devolverán la nueva configuración regional .

static{ 
     Locale.setDefault(Locale.UK); 
} 
+0

Sí, eso funcionaría con seguridad. El único problema es que tengo una gran cantidad de pruebas. Y también, en el futuro, alguien podría, y definitivamente lo hará, escribir una prueba unitaria sin establecer explícitamente el Locale programáticamente. – JHollanti

12

Prueba esto:

<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <configuration> 
      <argLine>-Duser.language=en -Duser.region=GB</argLine> 
     </configuration> 
    </plugin> 
+0

Esto resolvió el problema para mí. ¡Gracias! – sebadagostino

0

que tenían el mismo problema, pero tuve que resolverlo sin ingerencia en el fichero de pom.xml.Esto es posible a través del archivo de configuración global de Maven (generalmente ubicado en ~/.m2/settings.xml). Y para hacerlo, agregue un perfil como el que se muestra a continuación, que se activará de manera predeterminada:

<?xml version="1.0" encoding="UTF-8"?> 
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 
     http://maven.apache.org/xsd/settings-1.0.0.xsd"> 

    ... 

    <profiles> 
     <profile>  
      <id>my-prof</id> 
      <properties> 
       <argLine>-Duser.language=en -Duser.region=GB</argLine> 
      </properties>    
     </profile> 
    </profiles> 

    <activeProfiles> 
     <activeProfile>my-prof</activeProfile> 
    </activeProfiles> 

    ... 

</settings> 
Cuestiones relacionadas