2013-08-28 4 views
134

Я не могу понять, как это работает.Как сообщить Gradle использовать конкретную версию JDK?

Сценарий:

  • У меня есть приложение, построенное с Gradle
  • Приложение использует JavaFX

То, что я хочу

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

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

JAVA_HOME_FOR_MY_PROJECT=<path to my desired JDK> 

То, что я не хочу

  • точку JAVA_HOME до нужной версии JDK

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

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

Вопрос:

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

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

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

+6

Вы пытались установить 'org.gradle.java.home' в файле' gradle.properties'? [link] (http://www.gradle.org/docs/current/userguide/build_environment.html) –

+0

в eclipse вы можете создать «файл конфигурации продукта» в своем проекте, и вы можете упаковать jdk вместе с вашим продуктом. Нет необходимости указывать переменные env. – mdanaci

+2

@RayStojonic: Я просто попробовал, но gradle по-прежнему использует JAVA_HOME JDK для построения :( – bully

ответ

136

Два способа

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

  2. В вашем build.gradle

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

«gradle.properties» также можно определить на уровне проекта, см. Http://www.gradle.org/docs/current/userguide/build_environment.html –

+55

Если вы выполняете использование оболочки градиентов, вы также можете сделать это как ' ./gradlew -Dorg.gradle.java.home =/path_to_jdk_directory'. Хорошо, если вы не хотите касаться 'gradle.properties'. –

+8

Вопрос в том, как установить VERSION, а не JDK PATH, не так ли? – Dims

2

Как видно из Gradle (Eclipse plugin)

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

+0

Привет, Пол, на самом деле, именно это моя проблема. Я хочу определить другой JDK для задач построения градиентов, чем определенный в JAVA_HOME. Хотя, хорошо знать, что для этого будет запись в плагине eclipse :) – bully

+0

Стандартный Eclipse позволяет определять переменные среды для каждой конфигурации запуска. Но это не то, что мы пытаемся использовать с градием. Откройте проблему, если вы изучите этот вопрос дальше https://github.com/Nodeclipse/nodeclipse-1/issues –

49

Если добавить jdk_path в gradle.properties ваша сборка становится зависимой от этого конкретного пути. Вместо Run Gradle задачи с помощью следующей командной строки parametemer

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

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

+2

В Eclipse (Neon, 4.6) вы также можете установить Java Home в конфигурации сборки Gradle (см. Вкладку «Java Home» «). Это несколько утомительная работа, если у вас есть 20+ заданий построения ... Я думаю, что Gradle действительно нужно выбрать каталог Java Home из конфигурации системы! –

+1

Это справедливый вопрос. У меня есть soft-link под названием '/ usr/lib/java/jdk/home', который указывает на установленную версию _current_. Конечно, если вам нужна конкретная версия (например, u51), вам нужно указать конкретный путь. Кроме того, некоторые инструменты, которые хотят начинать с градиента, похоже, не устанавливают JDK в среду, в которой они дают gradle. И я никогда не устанавливал JDK как текущий JAVA_HOME, если это не сеанс разработки. – will

+3

Обратите внимание, что JDK_PATH не может иметь пробелы в Windows, даже если это в кавычках: у вас есть изменение «Program Files» на «PROGRA ~ 1» (все кепки) или что-то еще, о чем говорит DIR/X. – Noumenon

2

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

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

javaHome=<path to JDK> 

Добавить в свой gradlew файл сценария:

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 не должен быть включен в систему контроля версий.

1

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

+0

Это единственное решение, которое сработало для меня. –

7

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

В сборке .gradle вы можете достичь этого с помощью

apply plugin 'java' 
sourceCompatibility = 1.6 
targetCompatibility = 1.6 

См. Gradle documentation on this.

1

Я использую 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 
1

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

правой кнопкой мыши на развертывании или любой другой задачи и выберите «Открыть Gradle Конфигурация Выполнить ...»

enter image description here

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

enter image description here

Пожалуйста, обратите внимание, что бин будет добавлено самой Gradle задачи. Поэтому не добавляйте «bin» в путь.

 Смежные вопросы

  • Нет связанных вопросов^_^