Gradle에 특정 JDK 버전을 사용하도록하려면 어떻게해야합니까?


284

이 작업을 수행 할 수 없습니다.

대본:

  • 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? 링크
Ray Stojonic

이클립스에서 프로젝트에 "제품 구성 파일"을 생성하고 jdk를 제품과 함께 포장 할 수 있습니다. env 변수를 지정할 필요가 없습니다.
mdanaci

3
@RayStojonic : 방금 시도해 보았지만 gradle은 여전히 ​​JAVA_HOME JDK를 사용하여 건물을 만듭니다. (
bully

@ mdanaci : 솔직히 모든 개발자가 응용 프로그램을 패키지 할 수 있어야하기 때문에 버전 제어 (제안을 사용하면 결과가 될 것입니다)에서 JDK를 사용하고 싶지 않기 때문에 이것을 피할 수 있기를 바랐습니다. 또한 CI 서버에 이런 문제가 있습니다. 어쨌든 귀하의 제안에 감사드립니다 :)
괴롭히는

3
1 년 전, org.gradle.java.home설정은 gradle 데몬에만 적용됩니다. 어쨌든 포크를 true로 설정하고 forkOptions. executable을 사용하려는 jdk로 설정하십시오. link
Ray Stojonic

답변:


292

두 가지 방법

  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

23
gradle.properties도 프로젝트 레벨에서 정의 할 수 있습니다 볼 gradle.org/docs/current/userguide/build_environment.html
파올로 Fulgoni

143
gradle wrapper를 사용하여 실행하는 경우처럼 할 수도 있습니다 ./gradlew -Dorg.gradle.java.home=/path_to_jdk_directory. 를 터치하지 않으려면 gradle.properties좋습니다.
david.schreiber

26
문제는 JDK PATH가 아닌 VERSION을 설정하는 방법이었습니다.
Dim

40
이렇게하면 다른 경로에 Java가있는 다른 개발자와 프로젝트를 공유 할 수 없습니다.
Dim

10
옵션 1과 2 사이에 차이점이 있습니다. 옵션 1에서 우리는 gradle 자체가 실행되도록 JVM을 설정합니다. 옵션 2 우리는 javac가 자체 JVM에서 생성되도록 설정하고 있습니다. 어떤 이유로 든 gradle에 특정 JVM이 필요한 경우 (예 : 주어진 gradle 플러그인이 Java 8 용으로 컴파일 됨) 컴파일 프로세스를 위해 별도의 JVM을 포크해야합니다.
바젤 시사 니

147

gradle.properties 에 JDK_PATH를 추가하면 빌드가 해당 특정 경로에 종속됩니다. 대신 다음 명령 줄 매개 변수를 사용하여 gradle 작업 을 실행하십시오.

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

이렇게하면 빌드가 구체적인 경로에 의존하지 않습니다.


3
Eclipse (Neon, 4.6)에서는 Gradle 빌드 구성 내에서 Java 홈을 설정할 수도 있습니다 ( "Java Home"탭 참조). 20 개 이상의 빌드 작업이있는 경우 다소 지루한 작업입니다 ... Gradle이 실제로 시스템 구성에서 Java 홈 디렉토리를 선택해야한다고 생각합니다!
Markus L

1
이것은 공정한 포인트입니다. 현재 설치된 버전 /usr/lib/java/jdk/home을 가리키는 소프트 링크 가 있습니다. 물론 특정 버전 (예 : u51)을 원할 경우 경로에 대해 구체적이어야합니다. 또한 gradle을 시작하려는 일부 도구는 gradle을 제공하는 환경에서 JDK를 설정하지 않는 것 같습니다. 그리고 개발 세션이 아닌 한 JDK를 현재 JAVA_HOME으로 설정하지 않았습니다.
됩니다

6
JDK_PATH는 따옴표로 묶여 있어도 Windows에서 공백을 가질 수 없습니다. "프로그램 파일"을 PROGRA~1(모두 대문자)로 변경했거나 DIR / X가 알려주는 내용을 변경했습니다.
Noumenon

2
gradle wrapper를 사용하는 경우 다음과 같은 명령을 호출하십시오.
mirmdasif

3
"... gradle itself (either standalone distribution or wrapper) uses JDK from JAVA_HOME environment variable or (if it is not set) from PATH".이 문제를 해결하기 위해 gradlew 호출 전에 JAVA_HOME을 지정했습니다. (즉, env JAVA_HOME=/path/to/java gradlew war --stacktrace)
TekiusFanatikus

110

Maven 속성 maven.compiler.source(또는 <source>1.8</source>)에 해당하는 Gradle을 검색 할 때 여기에 끝나는 사람들에게 :

build.gradle에서는 다음을 통해이를 달성 할 수 있습니다

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

이에 대한 Gradle 설명서를 참조하십시오 .


1
이것은 나를 위해 일했지만 "apply plugin 'java'"를 "apply plugin : 'java'"로 변경해야했습니다 (콜론을 통지하십시오)
will.fiset

10
@morgwai-이것은 질문에 대한 대답 이 아니라는 점을 제외하고 는 "빌드에 사용될 JDK의 설치를 가리키는 변수 (개발자 시스템에 따라 정의 된 것)를 명시 적으로 묻는다" 전체 응용 프로그램 ". 정답은 정답입니다. 이 답변은 완전히 다른 질문에 대한 것입니다.
Jules

1
Javadoc 태스크 (Java 8을 사용하도록 지정된 프로젝트에서 모듈을 사용하여 Java 9에 따라 javadoc을 생성하려고 시도)와 같은 도구에 의해 무시됩니다.
CLOVIS

20

gradle wrapper를 사용하여 실행하는 경우 다음과 같이 JDK 경로로 명령을 실행할 수 있습니다

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


5

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버전 관리 시스템에 파일 을 포함해서는 안됩니다.


5

GRADLE_HOME / bin / gradle 파일에이 줄을 추가했습니다. export JAVA_HOME=/path/to/java/version


4

따라야 할 옵션이 하나 더 있습니다. gradle 작업에서 원하는 jdk 경로를 설정할 수 있습니다. (질문이 게시 된 지 얼마되지 않아서이 답변이 도움이 될 수 있습니다.)

배포 또는 다른 작업을 마우스 오른쪽 버튼으로 클릭하고 "Open Gradle Run Configuration ..."을 선택하십시오.

여기에 이미지 설명을 입력하십시오

그런 다음 "Java Home"으로 이동하여 원하는 Java 경로를 붙여 넣으십시오.

여기에 이미지 설명을 입력하십시오

bin은 gradle 작업 자체에 의해 추가됩니다. 따라서 경로에 "bin"을 추가하지 마십시오.


Gradle을 작업을 참조하지 마십시오
폴 맥카시에게


1

Windows의 경우 jdk 11 경로 매개 변수를 사용하여 gradle 작업을 따옴표로 실행하십시오.

gradlew clean build -Dorg.gradle.java.home="c:/Program Files/Java/jdk-11"

0

Gradle (Eclipse 플러그인) 에서 볼 수 있듯이

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

Gradle은 경로에서 찾은 JDK를 사용합니다 (확인하려면 java -version 사용). 또는 원하는 JDK의 설치 디렉토리를 가리 키도록 JAVA_HOME 환경 변수를 설정할 수 있습니다.


이 Eclipse 플러그인 또는 Enide Studio 2014 를 사용하는 경우 사용할 기본 JAVA_HOME (기본 설정에서 설정)은 0.15 버전입니다. http://www.nodeclipse.org/history


1
안녕하세요, 폴, 사실 이것은 정확히 제 문제입니다. JAVA_HOME에 정의 된 것과는 다른 gradle 빌드 작업에 대해 다른 JDK를 정의하고 싶습니다. 이클립스 플러그인에는 다음과 같은 항목이있을 것입니다. :)
bully

표준 Eclipse는 실행 구성 당 환경 변수를 정의 할 수 있습니다. 그러나 이것이 우리가 gradle로 시도하는 것이 아닙니다. 당신이이 질문에 더 탐구 경우 문제를 열고 github.com/Nodeclipse/nodeclipse-1/issues을
폴 Verest

0

Gradle 4.2를 사용하고 있습니다. 기본 JDK는 Java 9입니다. Java 9 초반에 Gradle 4.2는 JDK 8에서 올바르게 실행됩니다 (JDK 9 아님).

파일에서 %GRADLE_HOME%\bin\gradle.bat다음 과 같이 JDK를 수동으로 설정했습니다 .

@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

0

JDK 9+를 사용하는 경우 다음을 수행 할 수 있습니다.

java {
    sourceCompatibility = JavaVersion.VERSION_1_8
    targetCompatibility = JavaVersion.VERSION_1_8
}

tasks.withType<JavaCompile> {
    options.compilerArgs.addAll(arrayOf("--release", "8"))
}

다음과 같은 관련 문제도 볼 수 있습니다.



0

Kotlin DSL을 사용하는 경우 다음을 build.gradle.kts추가하십시오.

tasks.withType<JavaCompile> {
    options.isFork = true
    options.forkOptions.javaHome = File("C:\\bin\\jdk-13.0.1\\")
}

물론 Windows OS가 있고 javac컴파일러가 경로에 있다고 가정합니다 C:\bin\jdk-13.0.1\bin\javac. Linux OS의 경우도 비슷합니다.


-1

특정 명령을 실행하도록 한 번만 설정하려면 다음을 수행하십시오.

JAVA_HOME=/usr/lib/jvm/java-11-oracle/ gw build
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.