我想确保我的应用程序始终构建,运行测试,并使用正确的区域设置运行,无论构建和放大运行平台。
所以我有一个简单的单元测试来检查new Locale("nb", "NO") == Locale.getDefault()
使用_JAVA_OPTIONS
,GRADLE_OPTS
或JAVA_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选项?
答案 0 :(得分:0)
正如您在https://github.com/gradle/gradle/issues/2214所看到的,如果您通过org.gradle.jvmargs
进行设置,则某些系统属性设置不正确。但是使用systemProp.user.language=nb
代替了。
但即使只有在使用Gradle运行时才有效。因此,您必须更改IJ运行配置以设置这些系统属性,或者您必须使用IJ的Gradle来运行测试。