2012-01-17 16 views
10

Przeczytałem w maven-surefire-plugin and default locale, że Maven uruchamia testy rozwidlone, a zatem może stracić wszystkie ustawienia narodowe, które mógłbyś ustawić.Ustawić wtyczkę surefire Locale w pliku pom Maven

Czy istnieje sposób uruchamiania testów w Maven w trybie rozwidlonym i nadal zachowują ustawienia regionalne?

- EDIT -

Tak więc, aby wyjaśnić trochę: To jest całkowicie możliwe, aby ustawić język i region w oknie Właściwości systemu za pomocą:

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

I są faktycznie przekazywane do uruchomionego procesu . Nie ustawia to jednak odpowiednio ustawienia narodowego; ustawienia regionalne pozostają jako domyślne systemowe.

+0

Czy próbowałeś ustawić 'user.country' zamiast' user.region'? –

+0

Ustawienie kraju nie działa. Ustawia go jako właściwość systemową w porządku, nie wpływa w żaden sposób na lokalizację. – JHollanti

+0

dokumentacji Sun [1] stwierdza: „Po drugie, w niektórych implementacjach wykonawcze Java, użytkownik aplikacji może zmienić domyślne ustawienia regionalne gospodarza poprzez dostarczanie informacji na temat wiersza poleceń przez ustawienie user.language, user.country i użytkownika. odmienne właściwości systemu. " Więc, której JVM używasz? [1] http://java.sun.com/developer/technicalArticles/J2SE/locale/ –

Odpowiedz

2

nie mam sposób na sprawdzenie tego, ale spróbować:

<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, spróbuj tego:

<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

Nie, nie działa. Nawet nie ustawia właściwości systemu. – JHollanti

+0

Ok, nowy config pisał –

+0

Ten ustawia Właściwości systemu w porządku. Ustawienia regionalne pozostają domyślne. Dzięki za wysiłek. – JHollanti

2

Domyślne ustawienia narodowe aplikacja jest określane na trzy sposoby. Najpierw, chyba że wyraźnie zmieniłeś domyślną, metoda getDefault() zwraca ustawienia regionalne, które początkowo określono przez wirtualną maszynę Java (JVM) podczas pierwszego ładowania. Oznacza to, że JVM określa domyślne ustawienia narodowe ze środowiska hosta. Ustawienia regionalne środowiska hosta są określane przez system operacyjny hosta i przez użytkownika ustawione w tym systemie.

drugie, w niektórych implementacjach wykonawcze Java, użytkownik aplikacji może nadpisać domyślne ustawienia regionalne gospodarza poprzez dostarczanie informacji na wiersza poleceń przez ustawienie user.language, user.country i System user.variant nieruchomości. [Source]

myślę, że jesteś ofiarą pierwszej części, więc sekund nigdy dostaje szansę.

Zamiast tego, co można zrobić, to w badanej jednostki (albo jego klasa bazowa) ustawić domyślne ustawienia programowo jak stwierdzono później w tym samym tekście:

trzecie, aplikacja może nazywamy setDefault(Locale aLocale) Metoda . Metoda setDefault(Locale aLocale) umożliwia aplikacji ustawianie zasobów systemowych. Po ustawieniu domyślnego ustawienia narodowego za pomocą tej metody , kolejne wywołania do Locale.getDefault() zwrócą nowe ustawienia regionalne zestawu.

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

Tak, to by działało na pewno. Jedynym problemem jest to, że mam ogromną liczbę testów. A także w przyszłości ktoś, a większość na pewno, napisać test jednostkowy bez wyraźnego ustawiania Locale programowo. – JHollanti

12

Spróbuj tego:

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

To rozwiązało problem dla mnie. Dzięki! – sebadagostino

0

miałem ten sam problem, ale miałem go rozwiązać bez ingerence do pliku pom.xml.Jest to możliwe dzięki globalnej konfiguracji Mavena (zazwyczaj znajduje się pod adresem ~/.m2/settings.xml). Aby to zrobić, dodaj profil jak poniżej, który będzie domyślnie włączony:

<?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> 
Powiązane problemy