2012-01-17 46 views
10

maven-surefire-plugin and default localeでMavenがテストを実行しているため、設定したロケールが失われる可能性があります。Maven pomファイルのsurefireプラグインロケールを設定してください

Mavenでテストをフォークモードで実行してもロケールを保持する方法はありますか?

- EDIT -

ので、ビットを明確にする:使用してシステムのプロパティで言語と地域を設定することが十分可能である:

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

を、それらが実際に実行中のプロセスに渡されます。ただし、これに応じてロケールは設定されません。ロケールはシ​​ステムデフォルトのままです。

+0

'user.region'の代わりに' user.country'を設定しようとしましたか? –

+0

設定国が動作しません。それはシステムプロパティとして設定しても問題ありません。ロケールには何ら影響しません。 – JHollanti

+0

Sunのマニュアル[1]の内容は次のとおりです。 "Javaランタイムの実装によっては、アプリケーションのユーザーがuser.language、user.country、およびuserを設定して、この情報をコマンドラインで指定することで、ホストのデフォルトロケールを上書きすることができます。バリアントシステムのプロパティ " どのJVMを使用していますか? [1] http://java.sun.com/developer/technicalArticles/J2SE/locale/ –

答えて

2

私はこれをテストする方法を持っているが、それを試してみていない:

<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、これを試してみてください。

<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

いいえ、動作しません。システムプロパティも設定しません。 – JHollanti

+0

OK、新しい設定が投稿されました –

+0

これはシステムプロパティをうまく設定します。ロケールはデフォルトのままです。しかし、努力をいただきありがとうございます。 – JHollanti

2

アプリケーションのデフォルトのロケールがあります3つの方法で決定される。 最初にを指定した場合、明示的にデフォルトを変更しない限り、 getDefault()メソッドは、初めてロードされたときにJava仮想マシン(JVM)によって最初に確定されたロケールを返します。つまり、 JVMはホスト環境からのデフォルトロケールを決定します。ホストの 環境のロケールは、ホストオペレーティングシステムによって決定され、 はそのシステムで設定されたユーザー設定です。

いくつかのJavaランタイムの実装で、アプリケーションユーザが のuser.language、user.countryを設定することで、 上のコマンドラインを、この情報を提供することにより、ホストのデフォルトロケールを上書きすることができます第二に、そして user.variantシステムプロパティ。 [Source]

私はあなたが最初一部の被害者だと思うので、はチャンスを得ることはありません。

代わりに、何を行うことができますが、あなたのユニットテスト(または多分その基底クラス)にある同じテキストに後述するように、プログラムでデフォルトのロケールを設定します。

第三に、あなたのアプリケーションがsetDefault(Locale aLocale)を呼び出すことができます メソッド。 setDefault(Locale aLocale)メソッドを使用すると、アプリケーションに がシステム全体のリソースを設定できます。この メソッドを使用してデフォルトのロケールを設定した後、Locale.getDefault()を呼び出すと、新しく ロケールが返されます。

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

うん、それは確かに働くだろう。唯一の問題は、膨大な数のテストがあることです。また、将来的には、ロケールをプログラム的に明示的に設定することなく、単体テストを書くこともあります。 – JHollanti

12

これを試してみてください:

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

これは私の問題を解決しました。ありがとう! – sebadagostino

0

私は同じ問題を持っていたが、私はpom.xmlファイルに ingerenceずにを解決しなければなりませんでした。これは、Mavenのグローバル設定ファイル(通常は~/.m2/settings.xmlにあります)によって可能です。これを行うには、デフォルトで有効になる以下のようなプロファイルを追加してください:

<?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> 
関連する問題