如何让IntelliJ IDEA从Gradle配置中获得user.language和user.country的荣誉?

时间:2017-10-06 11:46:16

标签: java intellij-idea gradle internationalization locale

我想确保我的应用程序始终构建,运行测试,并使用正确的区域设置运行,无论构建和放大运行平台。

所以我有一个简单的单元测试来检查new Locale("nb", "NO") == Locale.getDefault()

使用_JAVA_OPTIONSGRADLE_OPTSJAVA_OPTS之一的区域设置运行构建工作:

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

但是我试图避免为每个开发人员和构建代理设置环境变量,所以我尝试在gradle.properties中设置这些变量:

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

这不起作用,因为Locale.getDefault()现在返回en_US

我尝试在tasks.WithType(JavaCompile)中设置它们,但这也不起作用:

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

tasks.withType(Test)有效。耶!

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

但现在问题是:IntelliJ IDEA仍然没有看到-Duser.* VM选项,单元测试在那里失败。

根据@Andrej的提示,我尝试按照a JetBrains issue中的说明在ProcessForkOptions中设置环境:

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

没有成功。

如何使其尊重Gradle配置?我是否必须在测试的运行配置中手动设置VM选项?

1 个答案:

答案 0 :(得分:0)

正如您在https://github.com/gradle/gradle/issues/2214所看到的,如果您通过org.gradle.jvmargs进行设置,则某些系统属性设置不正确。但是使用systemProp.user.language=nb代替了。

但即使只有在使用Gradle运行时才有效。因此,您必须更改IJ运行配置以设置这些系统属性,或者您必须使用IJ的Gradle来运行测试。