Установите верный плагин Locale в файле maven pom

Я читал в maven-surefire-plugin и стандартном стандарте по умолчанию, что Maven запускает тесты forked и, следовательно, может потерять любую локаль, которую вы могли бы установить.

Есть ли способ запустить тесты в Maven в разветвленном режиме и сохранить языковой стандарт?

- EDIT -

Итак, чтобы немного уточнить: Полностью можно задать язык и область в Свойствах системы, используя:

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

И они фактически передаются текущему процессу. Однако это не устанавливает локаль соответственно; locale остается как системное значение по умолчанию.

Ответ 1

Попробуйте следующее:

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

Ответ 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: ОК, попробуйте следующее:

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

Ответ 3

Стандартная локализация вашего приложения определяется тремя способами. Сначала, если вы явно не изменили значение по умолчанию, Метод getDefault() возвращает локаль, которая была изначально определена с помощью виртуальной машины Java (JVM) при ее первой загрузке. Это JVM определяет локаль по умолчанию из среды хоста. Гостья локаль среды определяется операционной системой хоста и пользовательские настройки, установленные в этой системе.

Второй, в некоторых реализациях исполнения Java, пользователь приложения может переопределите локальный стандарт хоста, указав эту информацию на в командной строке, установив user.language, user.country и Свойства системы user.variant. [Источник]

Я думаю, что вы стали жертвой части first, поэтому второй никогда не получает шанс.

Вместо этого вы можете сделать это в своем unit test (или, возможно, в базовом классе), установить языковой стандарт по умолчанию, как указано позже в том же тексте:

В-третьих, ваше приложение может вызвать setDefault(Locale aLocale)метод. Метод setDefault(Locale aLocale) позволяет вашему приложению установите системный ресурс. После того, как вы установили языковой стандарт по умолчанию метод, последующие вызовы Locale.getDefault() вернут установить языковой стандарт.

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

Ответ 4

У меня была такая же проблема, но мне пришлось решить ее без ingerence в файл pom.xml. Это возможно через глобальный файл конфигурации 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>