2017-10-06 7 views
0

Je souhaite m'assurer que mon application génère, exécute des tests et s'exécute toujours en utilisant les paramètres régionaux corrects, quelle que soit la version de la plateforme & exécutée.Comment faire en sorte que IntelliJ IDEA honore user.language et user.country de Gradle config?

J'ai donc un simple test unitaire qui vérifie que new Locale("nb", "NO") == Locale.getDefault()

L'exécution de la construction avec des paramètres régionaux dans l'un des _JAVA_OPTIONS, GRADLE_OPTS ou JAVA_OPTS travaux:

GRADLE_OPTS="-Duser.language=nb -Duser.country=NO" ./gradlew build 

Mais je suis en train d'éviter définir des variables d'environnement pour chaque développeur et agent de construction, j'ai donc essayé de les définir dans gradle.properties:

org.gradle.jvmargs=-Duser.language=nb -Duser.country=NO 

Cela ne fonctionne pas, car Locale.getDefault() renvoie maintenant en_US.

J'ai essayé en les replaçant dans tasks.WithType(JavaCompile), cela ne fonctionne pas non plus:

tasks.withType(JavaCompile) { 
    options.forkOptions.jvmArgs += ['-Duser.language=nb', '-Duser.country=NO'] 
} 

tasks.withType(Test) fonctionne cependant. Yay!

tasks.withType(Test) { 
    jvmArgs += ['-Duser.language=nb', '-Duser.country=NO'] 
} 

Mais maintenant au problème: IntelliJ IDEA ne voit toujours pas les options VM -Duser.* et le test unitaire échoue là.

En bout de @Andrej j'essayé de placer l'environnement dans ProcessForkOptions comme décrit dans a JetBrains issue:

tasks.withType(ProcessForkOptions) { 
    environment("LC_ALL", "nb_NO.UTF-8") 
} 

Aucun succès.

Comment puis-je lui faire honneur à la config Gradle? Dois-je définir manuellement les options de machine virtuelle dans la configuration d'exécution du test?

+1

Essayez de l'ajouter à la tâche qui crée un nouveau processus JVM, comme avec cet exemple: https://youtrack.jetbrains.com/issue/IDEA-115426#comment=27-610182 – Andrey

+0

@Andrey Bonne idée, mais cela n'a pas été fait Ne fonctionne pas, ni pour la construction de la ligne de commande ni d'IntelliJ – neu242

Répondre

0

Comme vous pouvez le voir à https://github.com/gradle/gradle/issues/2214, certaines propriétés système ne sont pas définies correctement si vous les définissez via org.gradle.jvmargs. Mais en utilisant systemProp.user.language=nb fonctionne à la place.

Mais même cela ne fonctionne que lorsque vous utilisez Gradle. Vous devez donc soit modifier la configuration d'exécution IJ pour définir également ces propriétés système, soit utiliser Gradle d'IJ pour exécuter les tests.

+0

J'ai essayé de mettre 'systemProp.user.language', mais cela n'a pas fonctionné :( – neu242

+0

Où/Comment avez-vous essayé? – Vampire