Передача ключа кодирования в 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.