特定のJDKバージョンを使用するようにGradleに指示するにはどうすればよいですか?


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 2013

Eclipseでは、プロジェクトに「製品構成ファイル」を作成でき、製品にjdkをパックできます。環境変数を指定する必要はありません。
mdanaci 2013

3
@RayStojonic:試してみましたが、gradleは引き続きJAVA_HOME JDKをビルドに使用しています:(
bully

@mdanaci:どんな開発者もアプリケーションをパックできなければならないので、正直にJDKをバージョン管理下に置きたくないので(これはあなたの提案を使用した場合の結果です)、私はこれを回避できることを本当に望んでいました。さらに、この方法でCIサーバーの問題が発生します。とにかくあなたの提案をありがとう:)
いじめ

3
1年前のように、org.gradle.java.home設定はどうやらGradleデーモンにのみ適用されます。どういうわけか...とにかく、forkをtrueに設定し、使用するjdkにforkOptions.executableを設定してみてください: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ラッパーを使用して実行している場合は、次のようにすることもできます ./gradlew -Dorg.gradle.java.home=/path_to_jdk_directory。触りたくない場合に最適gradle.propertiesです。
david.schreiber

26
問題は、JDK PATHではなくVERSIONを設定する方法でしたね。
2016年

39
この方法では、別のパスでJavaを使用している他の開発者とプロジェクトを共有できません。
2016年

10
オプション1と2の間には、明確にすべき違いがあります。オプション1では、Gradle自体を実行するようにJVMを設定します。これは、コンパイラタスクの実行にも使用されます(javac自体がJavaアプリケーションであることに注意してください)。オプション2では、javacが独自のJVMで生成されるように設定しています。何らかの理由でGradleに特定のJVMが必要な場合(たとえば、特定のGradleプラグインがJava 8向けにコンパイルされるなど)、コンパイルプロセス用に別のJVMをフォークすることを余儀なくされます。
バーゼルシシャニ2016

147

gradle.propertiesにJDK_PATHを追加すると、ビルドはその特定のパスに依存するようになります。代わりに、次のコマンドラインパラメーターを使用してgradleタスクを実行します

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

このようにして、ビルドは特定のパスに依存しません。


3
Eclipse(Neon、4.6)では、Gradleビルド構成内でJavaホームを設定することもできます(「Javaホーム」タブを参照)。20以上のビルドジョブがある場合、これはやや退屈な作業です... Gradleは本当にシステムの構成からJavaホームディレクトリを選択する必要があると思います!
Markus L

1
これは公平な点です。インストールされ/usr/lib/java/jdk/homeている現在のバージョンを指すと呼ばれるソフトリンクがあります。もちろん、特定のバージョン(たとえばu51)が必要な場合は、パスを具体的に指定する必要があります。また、gradleをキックオフしたいツールの中には、gradleを提供する環境にJDKを設定しないものがあります。また、開発セッションでない限り、JDKを現在のJAVA_HOMEとして設定することはありません。
ます

6
JDK_PATHは、引用符で囲まれていても、Windowsではスペースを使用できないことに注意してください。「Program Files」をPROGRA~1(すべて大文字)に変更するか、DIR / Xから通知されます。
Noumenon 2017年

2
Gradleラッパーを使用している場合は、次のようなコマンドを実行します。
mirmdasif 2017年

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 2017年

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

9
@morgwai-これ質問の答えではないことを除いて、「ビルドに使用されるJDKのインストールを指す変数(開発者のマシンごとに定義)を変数に設定したい」を明示的に尋ねますアプリケーション全体」。投票の答えは正しいです。この回答は、まったく別の質問に対するものです。
ジュール

これは、Javadocタスク(Java 8を使用するように指定されている私のプロジェクトのモジュールでJava 9に従ってjavadocを生成しようとする)などのツールでは無視されます
CLOVIS

20

Gradleラッパーを使用して実行している場合は、次のように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パスを設定できます。(質問が投稿されてからしばらく経っています。この回答は誰かを助けることができます。)

デプロイまたはその他のタスクを右クリックして、「Gradle実行構成を開く...」を選択します。

ここに画像の説明を入力してください

次に、「Javaホーム」に移動し、目的のJavaパスを貼り付けます。

ここに画像の説明を入力してください

ビンはgradleタスク自体によって追加されることに注意してください。そのため、パスに「bin」を追加しないでください。


Gradleタスクが表示されない
Paul McCarthy


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を定義したいのですが。しかし、これのためのEclipseプラグインにエントリがあることを知っておくのは良いことです:)
いじめ

標準のEclipseでは、起動構成ごとに環境変数を定義できます。しかし、それは私たちがgradleで試すことではありません。この質問をさらに調査する場合は、問題を開いてください。github.com/Nodeclipse/nodeclipse
Paul Verest

0

Gradle 4.2を使用しています。デフォルトのJDKはJava 9です。Java9の初日、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

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コンパイラがpathにあることを前提としていますC:\bin\jdk-13.0.1\bin\javac。Linux OSの場合も同様です。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.