2012-01-17 11 views
10

Ho letto in maven-surefire-plugin and default locale che Maven esegue i test biforcati e quindi potrebbe perdere qualsiasi impostazione locale che potresti avere impostato.Imposta il plugin surefire nelle impostazioni locali nel file pom Maven

Esiste un modo per eseguire test in Maven in modalità a forcella e mantenere le impostazioni internazionali?

- EDIT -

Quindi, per chiarire un po ': E' pienamente possibile impostare lingua e la regione in Proprietà del sistema utilizzando:

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

e sono in realtà passati al processo in esecuzione . Questo tuttavia non imposta le impostazioni internazionali di conseguenza; locale rimane come predefinito di sistema.

+0

Hai provato a impostare 'user.country' invece di' user.region'? –

+0

Il Paese di impostazione non funziona. Lo imposta come proprietà di sistema correttamente, non influenza in alcun modo le impostazioni internazionali. – JHollanti

+0

La documentazione di Sun [1] afferma: "In secondo luogo, in alcune implementazioni runtime Java, l'utente dell'applicazione può sovrascrivere le impostazioni locali predefinite dell'host fornendo queste informazioni sulla riga di comando impostando user.language, user.country e user. varianti di sistema. " Quindi, quale JVM stai usando? [1] http://java.sun.com/developer/technicalArticles/J2SE/locale/ –

risposta

2

Non ho un modo per testare questo, ma fare un tentativo:

<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 provare questo:

<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, non funziona. Non imposta nemmeno le Proprietà di sistema. – JHollanti

+0

Ok, nuova config postata –

+0

Questo imposta le Proprietà del sistema bene. Le impostazioni internazionali rimangono predefinite. Grazie per lo sforzo però. – JHollanti

2

la localizzazione predefinita della vostra applicazione è determinato in tre modi. Prima di, a meno che non sia stato modificato in modo esplicito il valore predefinito, il metodo getDefault() restituisce l'impostazione internazionale determinata inizialmente dalla Java Virtual Machine (JVM). Cioè, la JVM determina le impostazioni locali predefinite dall'ambiente host. Le impostazioni locali dell'host sono determinate dal sistema operativo host e le preferenze dell'utente stabilite su tale sistema.

Secondo, in alcune implementazioni di runtime di Java, l'utente dell'applicazione può ignorare internazionale predefinita del padrone di casa, fornendo queste informazioni riga di comando impostando l'user.language, user.country, e sistema user.variant proprietà. [Source]

penso che tu sia una vittima della prima parte, così secondo non ha la possibilità.

Invece, ciò che si può fare è nel tuo test di unità (o forse una classe base della stessa) impostare l'impostazione internazionale predefinita programmaticamente come indicato più avanti nello stesso testo:

In terzo luogo, l'applicazione può chiamare il setDefault(Locale aLocale) Metodo . Il metodo setDefault(Locale aLocale) consente all'applicazione di impostare una risorsa a livello di sistema. Dopo aver impostato le impostazioni internazionali predefinite con questo metodo , le chiamate successive a Locale.getDefault() restituiranno la nuova locale impostata .

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

Sì, funzionerebbe sicuramente. L'unico problema è che ho un numero enorme di test. Inoltre, in futuro qualcuno potrebbe, e sicuramente lo farà, scrivere un test unitario senza impostare esplicitamente le impostazioni internazionali a livello di programmazione. – JHollanti

12

Prova questo:

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

Questo ha risolto il problema per me. Grazie! – sebadagostino

0

ho avuto lo stesso problema, ma ho dovuto risolverlo senza ingerenza al file pom.xml.Ciò è possibile tramite il file di configurazione globale di Maven (in genere situato a ~/.m2/settings.xml). E per farlo aggiungi un profilo come sotto, che sarà attivato di default:

<?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> 
Problemi correlati