gpt4 book ai didi

java - 将编码开关传递给 Gradle "JavaExec"任务的 JVM

转载 作者:太空宇宙 更新时间:2023-11-04 11:24:55 24 4
gpt4 key购买 nike

我在这里遇到一些编码问题。

这是在 W10 操作系统上,但我使用 DOS 控制台和 Cygwin shell 直接运行任务。在 Eclipse 中,我使用 Buildship 插件运行,并且对于我的“生产”输出,我正在制作一个“胖”jar(即包含所有依赖项 jar)。

为了让 fat jar 在 DOS 控制台中运行,我这样做:

> chcp 65001
> java -jar -Dfile.encoding=UTF-8 myFatJar.jar

为了让 fat jar 在 Cygwin 控制台中运行,我省略了“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 控制台,我都会遇到编码问题:Unicode 字符转至 System.out 时出现问题。

在我的 gradle.build (我正在使用 application 插件)中,我尝试了以下操作:

applicationDefaultJvmArgs = ["-Dfile.encoding=UTF-8"]

...但这似乎没有任何效果。

顺便说一句,在测试过程中,我有一些输出到 System.out...当我检查 JUnit/Mockito 测试结果时,结果很好。

在我寻求“所有我的鸭子排成一排”的过程中,我还尝试了修改 Java 代码本身:我没有直接使用 System.out,而是尝试了以下方法:

    PrintStream out = new PrintStream(System.out, true, "UTF-8");
out.print( message );

...但这会导致运行测试时输出到 System.out 的编码问题!

gradle 命令 applicationDefaultJvmArgs 让我想知道是否有一种方法可以在运行 JavaExec 类型的任务时将“非默认”开关传递给 JVM...

稍微晚一些

哈..这些事情就是这样:

我将以下行添加到我的 myRun 任务中:

jvmArgs "-Dfile.encoding=UTF-8" 

...DOS 和 Cygwin 控制台运行的编码问题已...解决!但是,当我在 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 myRun 的“运行配置”缺少这个 JVM 参数。添加它非常简单:运行 --> 运行配置 --> 选择“myRun” --> 参数选项卡 --> JVM 参数。

我所有的鸭子似乎都在 UTF-8 行中。万岁。

关于java - 将编码开关传递给 Gradle "JavaExec"任务的 JVM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44483067/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com