将编码开关传递给 JVM 以执行 Gradle "JavaExec" 任务
Passing an encoding switch to the JVM for a Gradle "JavaExec" task
我遇到了一些编码问题。
这是在 W10 OS 上,但我直接使用 DOS 控制台和 Cygwin shell 到 运行 任务。在 Eclipse 中,我 运行 正在使用 Buildship 插件,对于我的 "production" 输出,我正在制作一个 "fat" jar(即包含所有依赖项 jar)。
要在 DOS 控制台中将 fat jar 传送到 运行,我这样做:
> chcp 65001
> java -jar -Dfile.encoding=UTF-8 myFatJar.jar
为了在 Cygwin 控制台中将 fat jar 传送到 运行,我省略了 "chcp" 命令
...并且这两个 运行 很好,没有编码问题。
我有一个 run
任务,看起来像这样:
task myRun(type: JavaExec, dependsOn: assemble ) {
standardInput = System.in
classpath sourceSets.main.runtimeClasspath
main = "core.ConsoleHandler"
}
当我在 Eclipse(Buildship 插件)中 运行 时,没有编码问题。
当,在 gradle 目录中,我是这样的:
> gradle myRun
无论我使用的是 DOS 还是 Cygwin 控制台,我都会遇到编码问题:转至 System.out
.
的 Unicode 字符出现问题
在我的 gradle.build 中(我使用的是 application
插件)我试过这个:
applicationDefaultJvmArgs = ["-Dfile.encoding=UTF-8"]
...不过这个好像没什么效果
顺便说一句,在测试期间,我有一些输出到 System.out
... 当我检查 JUnit/Mockito 测试结果时,结果很好。
为了获得 "all my ducks in a row",我还尝试弄乱 Java 代码本身:我没有直接使用 System.out
,而是尝试了这个:
PrintStream out = new PrintStream(System.out, true, "UTF-8");
out.print( message );
...但这会在 运行ning 测试时导致输出到 System.out
的编码问题!
gradle 命令 applicationDefaultJvmArgs
让我想知道是否有一种方法可以在 运行ing a JavaExec
时将 "non-default" 切换到 JVM-输入任务...
稍微晚一点
哈..这些事情就是这样:
我在 myRun
任务中添加了以下行:
jvmArgs "-Dfile.encoding=UTF-8"
...并且 DOS 和 Cygwin 控制台 运行s 的编码问题已...解决!但是,当我在 Eclipse Buildship 中 运行 myRun
任务时,我现在遇到了编码问题!:
référé juge des ~s: "Judge sitting in Chambers to deal with urgent
matters"
état juge de mise en ~: joinder of issue judge
'É' 应为 'é'(在添加此 jvmArgs
参数之前)
当然,总的来说这是一个改进......但如果能从专家那里知道这是怎么回事就好了......
有时候 做 是有道理的...虽然我仍然觉得编码是一个令人痛苦、令人生畏和毁灭灵魂的主题。
我的 运行 的 Eclipse "run configuration" 缺少这个 JVM 参数。添加它很简单:运行 --> 运行 配置 --> 选择 "myRun" --> Arguments 选项卡 --> JVM Arguments.
我所有的鸭子似乎都在 UTF-8 行中。万岁。
我遇到了一些编码问题。
这是在 W10 OS 上,但我直接使用 DOS 控制台和 Cygwin shell 到 运行 任务。在 Eclipse 中,我 运行 正在使用 Buildship 插件,对于我的 "production" 输出,我正在制作一个 "fat" jar(即包含所有依赖项 jar)。
要在 DOS 控制台中将 fat jar 传送到 运行,我这样做:
> chcp 65001
> java -jar -Dfile.encoding=UTF-8 myFatJar.jar
为了在 Cygwin 控制台中将 fat jar 传送到 运行,我省略了 "chcp" 命令
...并且这两个 运行 很好,没有编码问题。
我有一个 run
任务,看起来像这样:
task myRun(type: JavaExec, dependsOn: assemble ) {
standardInput = System.in
classpath sourceSets.main.runtimeClasspath
main = "core.ConsoleHandler"
}
当我在 Eclipse(Buildship 插件)中 运行 时,没有编码问题。
当,在 gradle 目录中,我是这样的:
> gradle myRun
无论我使用的是 DOS 还是 Cygwin 控制台,我都会遇到编码问题:转至 System.out
.
在我的 gradle.build 中(我使用的是 application
插件)我试过这个:
applicationDefaultJvmArgs = ["-Dfile.encoding=UTF-8"]
...不过这个好像没什么效果
顺便说一句,在测试期间,我有一些输出到 System.out
... 当我检查 JUnit/Mockito 测试结果时,结果很好。
为了获得 "all my ducks in a row",我还尝试弄乱 Java 代码本身:我没有直接使用 System.out
,而是尝试了这个:
PrintStream out = new PrintStream(System.out, true, "UTF-8");
out.print( message );
...但这会在 运行ning 测试时导致输出到 System.out
的编码问题!
gradle 命令 applicationDefaultJvmArgs
让我想知道是否有一种方法可以在 运行ing a JavaExec
时将 "non-default" 切换到 JVM-输入任务...
稍微晚一点
哈..这些事情就是这样:
我在 myRun
任务中添加了以下行:
jvmArgs "-Dfile.encoding=UTF-8"
...并且 DOS 和 Cygwin 控制台 运行s 的编码问题已...解决!但是,当我在 Eclipse Buildship 中 运行 myRun
任务时,我现在遇到了编码问题!:
référé juge des ~s: "Judge sitting in Chambers to deal with urgent matters"
état juge de mise en ~: joinder of issue judge
'É' 应为 'é'(在添加此 jvmArgs
参数之前)
当然,总的来说这是一个改进......但如果能从专家那里知道这是怎么回事就好了......
有时候 做 是有道理的...虽然我仍然觉得编码是一个令人痛苦、令人生畏和毁灭灵魂的主题。
我的 运行 的 Eclipse "run configuration" 缺少这个 JVM 参数。添加它很简单:运行 --> 运行 配置 --> 选择 "myRun" --> Arguments 选项卡 --> JVM Arguments.
我所有的鸭子似乎都在 UTF-8 行中。万岁。