Как сообщить Gradle использовать конкретную версию JDK?

Я не могу понять, как это работает.

Сценарий:

  • У меня есть приложение, построенное с помощью gradle
  • В приложении используется JavaFX

Что я хочу

  • Используйте переменную (определенную для машины-разработчика), которая указывает на установку JDK, который будет использоваться для построения всего приложения/тестов/...

Я думал о наличии файла gradle.properties, определяющего переменную. Что-то вроде

JAVA_HOME_FOR_MY_PROJECT=<path to my desired JDK>

Что я не хочу

  • point JAVA_HOME к желаемому JDK

Я мог бы жить со многими предложениями:

  • решение, определяющее переменную системной среды, которую я могу проверить в моем build.gradle script
  • переменная, определенная в gradle.properties
  • переопределение переменной JAVA_HOME только для контекста сборки (что-то вроде use JAVA_HOME=<my special JDK path defined somewhere else defined>)
  • что-то еще я не думал о

Вопрос:

  • Как подключить переменную (как она определяется как переменная в переменной gradle.properties, системная переменная среды...) для процесса сборки?

У меня доступно более одного JDK7 и нужно указать специальную версию (минимальная версия JDK_u).

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

Ответ 1

Два пути

  1. В gradle.properties в каталоге .gradle в вашем HOME_DIRECTORY установите org.gradle.java.home=/path_to_jdk_directory

или же:

  1. В вашей build.gradle

    compileJava.options.fork = true
    compileJava.options.forkOptions.executable = /path_to_javac
    

Ответ 2

Если вы добавите JDK_PATH в gradle.properties, ваша сборка станет зависимой от этого конкретного пути. Вместо этого запустите gradle задачу со следующим параметром командной строки

gradle build -Dorg.gradle.java.home=/JDK_PATH

Таким образом, ваша сборка не зависит от конкретного пути.

Ответ 3

Людям, maven.compiler.source сюда при поиске эквивалента Gradle свойства Maven maven.compiler.source (или <source>1.8</source>):

В build.gradle вы можете добиться этого с

apply plugin: 'java'
sourceCompatibility = 1.8
targetCompatibility = 1.8

Смотрите документацию Gradle по этому вопросу.

Ответ 4

Если вы используете linux и gradle wrapper, вы можете использовать следующее решение.

Добавить путь к файлу local.properties:

javaHome=<path to JDK>

Добавьте в свой файл gradlew script:

DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
source $DIR/local.properties 2>/dev/null

if ! [ -z "$javaHome" ]
then
  JAVA_HOME=$javaHome
fi

В этом решении каждый разработчик может установить свой собственный путь JDK. Файл local.properties не должен включаться в систему контроля версий.

Ответ 5

Я добавил эту строку в мой файл GRADLE_HOME/bin/gradle export JAVA_HOME=/path/to/java/version

Ответ 6

Есть еще один вариант для подражания. В ваших задачах вы можете установить желаемый путь JDK. (Я знаю, что это время, так как вопрос был опубликован. Этот ответ может кому-то помочь.)

Щелкните правой кнопкой мыши на развертывании или любой другой задаче и выберите "Открыть конфигурацию запуска Gradle..."

enter image description here

Затем перейдите к "Java Home" и вставьте желаемый путь Java.

enter image description here

Обратите внимание, что bin будет добавлен самой задачей gradle. Так что не добавляйте "мусорное ведро" к пути.

Ответ 7

Как видно из Gradle (плагин Eclipse)

http://www.gradle.org/get-started

Gradle использует какой-либо JDK, который он находит на вашем пути (чтобы проверить, используйте java -version). Кроме того, вы можете установить переменную среды JAVA_HOME, чтобы указать на каталог установки желаемого JDK.


Если вы используете этот плагин Eclipse или Enide Studio 2014, альтернативный JAVA_HOME для использования (устанавливается в настройках) будет в версии 0.15, см. http://www.nodeclipse.org/history

Ответ 8

Если вы выполняете с использованием Gradle Wrap, вы можете запустить команду с путем JDK, как показано ниже

./gradlew -Dorg.gradle.java.home=/jdk_path_directory

Ответ 9

есть плагин Gradle, который автоматически загружает/загружает JDK:

https://plugins.gradle.org/plugin/com.github.rmee.jdk-bootstrap

Интеграция IDE еще не требуется, и для Windows требуется приличная оболочка.

Ответ 10

Я использую Gradle 4.2. По умолчанию JDK - это Java 9. В ранний день Java 9, Gradle 4.2 работает на JDK 8 правильно (не JDK 9).

Я устанавливал JDK вручную, как это, в файле %GRADLE_HOME%\bin\gradle.bat:

@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem  Gradle startup script for Windows
@rem
@rem ##########################################################################

@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal

set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%..

@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=

@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome

@rem VyDN-start.
set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_144\
@rem VyDN-end.

set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init

echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.

goto fail

:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%


@rem VyDN-start.
set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_144\
@rem VyDN-end.


set JAVA_EXE=%JAVA_HOME%/bin/java.exe

if exist "%JAVA_EXE%" goto init

echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.

goto fail

:init
@rem Get command-line arguments, handling Windows variants

if not "%OS%" == "Windows_NT" goto win9xME_args

:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2

:win9xME_args_slurp
if "x%~1" == "x" goto execute

set CMD_LINE_ARGS=%*

:execute
@rem Setup the command line

set CLASSPATH=%APP_HOME%\lib\gradle-launcher-4.2.jar

@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.launcher.GradleMain %CMD_LINE_ARGS%

:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd

:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1

:mainEnd
if "%OS%"=="Windows_NT" endlocal

:omega