2017-10-06 11 views
0

내 앱이 항상 빌드되고, 테스트를 실행하며, 실행 플랫폼 &에 관계없이 올바른 로케일을 사용하여 실행되도록하고 싶습니다.Gradle 구성에서 IntelliJ IDEA가 user.language 및 user.country를 사용하도록하려면 어떻게합니까?

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

하지만 피하려고 노력 해요 :

그래서 나는 new Locale("nb", "NO") == Locale.getDefault()

_JAVA_OPTIONS, GRADLE_OPTS 또는 JAVA_OPTS 작품 중 하나에 로케일 설정과 빌드를 실행하는 것을 확인하는 간단한 단위 테스트가 모든 개발자를위한 환경 변수를 설정하고 에이전트를 빌드 했으므로 이것들을 설정해 보았습니다. gradle.properties :

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

Locale.getDefault()이 이제 en_US을 반환하므로 작동하지 않습니다.

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

tasks.withType(Test) 그러나 작동합니다

내가 중 하나가 작동하지 않는, tasks.WithType(JavaCompile)에서 그들을 설정했습니다. 예!
tasks.withType(Test) { 
    jvmArgs += ['-Duser.language=nb', '-Duser.country=NO'] 
} 

하지만 지금은 문제에

:하게 IntelliJ IDEA는 여전히 -Duser.* VM 옵션을 참조하지 않고, 단위 테스트가 실패합니다.

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

없음 성공 : a JetBrains issue에 설명 된대로 @Andrej에서 팁으로

나는 ProcessForkOptions 환경을 설정했습니다.

어떻게하면 Gradle 구성을 준수하게 할 수 있습니까? 테스트를 위해 Run Configuration에서 VM 옵션을 수동으로 설정해야합니까?

+1

이 예제와 같이 새 JVM 프로세스를 생성하는 태스크에 추가하십시오. https://youtrack.jetbrains.com/issue/IDEA-115426#comment=27-610182 – Andrey

+0

@Andrey 좋은 아이디어이지만 좋은 아이디어는 아닙니다. 명령 줄 구축이나 IntelliJ에서 작동하지 않습니다. – neu242

답변

0

https://github.com/gradle/gradle/issues/2214에서 볼 수 있듯이 org.gradle.jvmargs을 통해 시스템 속성을 설정하면 일부 시스템 속성이 올바르게 설정되지 않습니다. 하지만 대신 systemProp.user.language=nb을 사용하면됩니다.

그래도 Gradle을 사용할 때만 작동합니다. 따라서 IJ 실행 구성을 변경하여 해당 시스템 속성을 설정하거나 IJ에서 Gradle을 사용하여 테스트를 실행해야합니다.

+0

'systemProp.user.language' 설정을 시도했지만 다음 중 하나도 작동하지 않았습니다. ( – neu242

+0

/어떻게 시도 했습니까? – Vampire