Заставьте демона Gradle работать на определенной версии Java - PullRequest
0 голосов
/ 19 марта 2019

Это Gradle 5.2.1 в Cygwin BASH на ОС Windows 10.

Есть несколько ответов о том, как заставить Gradle использовать определенные JDK и JRE.Моя система использует Java 9 (в том смысле, что JAVA_HOME указывает на его JDK и первую запись для PATH в его каталог \ bin) ... но для конкретного проекта, использующего TestFX, я должен использовать Java 8.

Я часами пытался заставить вещи работать, но я всегда сталкиваюсь с этой проблемой.Вывод:

$ ./gradlew build -Dorg.gradle.java.home = D: /apps/Java/jdk1.8.0_191
Запуск демона Gradle, 20 занятых и 2 несовместимых демонане может быть повторно использован, используйте --status для подробностей

FAILURE: сборка не удалась с исключением.

  • Что пошло не так: недавно созданный процесс демона имеет контекст, отличный от ожидаемого.Невозможно восстановить связь с этим демоном.Несоответствие контекста: дом Java отличается.
    Требуются: DefaultDaemonContext [uid = null, javaHome = D: \ apps \ Java \ jdk1.8.0_191, daemonRegistryDir = D: \ apps \ gradle \ gradle-5.2.1 \ gradle_user_home \ daemon, pid = 8736, idleTimeout =нуль, приоритет = NORMAL, daemonOpts = -XX: MaxMetaspaceSize = 256m, -XX: + HeapDumpOnOutOfMemoryError, -Xmx512m, -Dfile.encoding = окна-1252, -Duser.country = GB, -Duser.language = еп, -Duser.вариант]
    Факт: DefaultDaemonContext [uid = 12195e35-1c39-45d6-8abe-bdeebeea4d37, javaHome = D: \ apps \ Java \ jre1.8.0_201, daemonRegistryDir = D: \ apps \ gradle \ gradle-5.2.1 \gradle_user_home \ демон, PID = 10500, idleTimeout = 10800000, приоритет = NORMAL, daemonOpts = -XX: MaxMetaspaceSize = 256m, -XX: + HeapDumpOnOutOfMemoryError, -Xmx512m, -Dfile.encoding = окна-1252, -Duser.country = GB,-Duser.language = en, -Duser.variant]

То, что меня сбивает с толку, так это бит для демона "Actual": "javaHome = D: \ apps \ Java \"jre1.8.0_201 ".

В этом месте действительно есть JRE ... но ни в одной точке моей системы я не говорю, или кто-то говорит, что это" дом Java "/ "java.home" / JAVA_HOME или действительно, как здесь напечатано, javaHome.

Между прочим, я поместил операторы ECHO в gradlew, чтобы сообщить мне, какие JAVA_HOME и JAVACMD будут использоваться.На самом деле они показывают пути Java 9, как моя система настроена.Однако ясно, что директива для использования Java 8 работает (работает одинаково, если я помещу это в gradle.properties), поскольку демон, который в конечном итоге запускается, явно работает на Java 8. Но ПОЧЕМУ или КАК он находит эту JRE?путь ... и затем называя его "javaHome" / "java.home" / "JAVA_HOME"?

1 Ответ

0 голосов
/ 19 марта 2019

Я рассматриваю это как обходной путь, поскольку я действительно не понимаю механизмы здесь.

Я пошел в Oracle и скачал установочный файл JDK 8u191 .exe и установил в моей системе.Часть этого процесса включает в себя «регистрацию компонентов» и другие вещи ... достаточно сказать, что в конце этого проблема несовместимости демонов, похоже, исчезла.

Просмотр моего значка «Java» («Java»).Панель управления "?) в Панели управления W10 я обнаружил, что ничего не изменилось: у меня есть 3 версии Java на вкладке" Пользователь ": 11.0.2, 1.8.0_201 (не отмечен для" Включен ") и 1.8.0_191.На вкладке Система есть только один: 1.8.0_201 (не отмечен для «Включен»).

Похоже, что демоны создаются с помощью 1.8.0_191, который работает, потому что это та же версия Java, что и в ./директива сборки gradlew.Тем не менее, хотелось бы знать, как все это работает: настройка Java 8, похоже, подталкивает Gradle к поиску места, которое выглядит «примерно как для Java 8 JDK».

...