Передача ключа кодирования в JVM для задачи Gradle "JavaExec"

У меня проблемы с кодировкой здесь.

Это на W10 OS, но я использую как консоль DOS, так и оболочку Cygwin для непосредственного запуска задач. Когда в Eclipse я запускаюсь с использованием плагина Buildship, и для моего "производственного" вывода я делаю "толстую" банку (т.е. Содержащую все банки с зависимостями).

Чтобы получить жирную банку для запуска в консоли DOS, я делаю следующее:

> chcp 65001
> java -jar -Dfile.encoding=UTF-8 myFatJar.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 заставляет задуматься, есть ли способ передачи "не по умолчанию" переключателей в JVM при запуске задачи JavaExec -type...

еще немного позже

Вот так происходит с этими вещами:

Я добавил следующую строку в мою задачу myRun:

jvmArgs "-Dfile.encoding=UTF-8" 

... и проблема с кодировкой DOS и консолей Cygwin была решена! Однако, когда я запускаю задачу myRun в Eclipse Buildship, теперь я получаю проблемы с кодировкой!:

rà © fà © rà © juge des ~ s: "Судья, сидящий в палатах, для решения неотложных вопросы"
à © tat juge de mise en ~: объединение судьи проблемы

'Ã ©' должен быть 'é' (и был перед добавлением этого аргумента jvmArgs)

В целом, это улучшение... но было бы неплохо узнать от эксперта, что здесь происходит...

Ответы

Ответ 1

Иногда вещи делают имеют смысл... хотя я все еще нахожу кодирование мучительного, запугивающего и душеразрушающего субъекта.

My Eclipse "run configuration" для myRun не хватало этого аргумента JVM. Добавление его было достаточно простым: Run → Run configurations → выберите "myRun" → вкладка "Аргументы" → "Аргументы JVM".

Все мои утки, кажется, находятся в строке UTF-8. Hurray.