Gradle'a belirli JDK sürümünü kullanmasını nasıl söyleyebilirim?


284

Bunun işe yaramasını sağlayamıyorum.

Senaryo:

  • Gradle ile oluşturulmuş bir uygulamam var
  • Uygulama JavaFX kullanıyor

İstediğim

  • Tüm uygulamayı / testleri / ... oluşturmak için kullanılacak bir JDK kurulumuna işaret eden bir değişken (geliştirici makinesi başına tanımlanmış) kullanın ...

gradle.propertiesDosyayı almayı, değişkeni tanımlamayı düşündüm . Gibi bir şey

JAVA_HOME_FOR_MY_PROJECT=<path to my desired JDK>

Ne istemiyorum

  • işaret JAVA_HOMEarzu edilen JDK

Birçok öneriyle yaşayabilirim:

  • build.gradle betiğimde kontrol edebildiğim bir sistem ortamı değişkenini tanımlayan bir çözüm
  • gradle.properties dosyasında tanımlanan bir değişken
  • JAVA_HOME değişkenini yalnızca derleme içeriği için geçersiz kılma (benzeri bir şey use JAVA_HOME=<my special JDK path defined somewhere else defined>)
  • düşünmediğim başka bir şey

Soru:

  • Bir değişkeni ( gradle.propertiessistem ortamı değişkeninde değişken olarak nasıl tanımlanır , ...) derleme işlemine nasıl bağlarım?

Birden fazla JDK7 kullanılabilirim ve özel bir sürüme (minimum JDK_u sürümü) işaret etmem gerekiyor.

Herhangi bir cevap takdir ve doğru yönde her ipucu için minnettarım.


6
Ayarı denediniz org.gradle.java.homeiçinde gradle.propertiesdosyanın? bağlantı
Ray Stojonic

tutulmada projenize "ürün yapılandırma dosyası" oluşturabilir ve jdk'yi ürününüzle birlikte paketleyebilirsiniz. Env değişkenlerini belirtmeye gerek yoktur.
mdanaci

3
@RayStojonic: Ben sadece denedim, ama kepçe hala bina için JAVA_HOME JDK kullanır :(
kabadayı

@mdanaci: Gerçekten bunu önleyebileceğimi umuyordum çünkü dürüstçe, herhangi bir geliştiricinin uygulamayı paketleyebilmesi gerektiğinden, sürüm kontrolüne göre bir JDK almak istemiyorum (önerinizi kullanırsam sonuç olur). Ayrıca, bu şekilde CI sunucusuyla ilgili sorunları görüyorum. Yine de öneriniz için teşekkürler :)
bully

3
Bir yıl önce, org.gradle.java.homeayar sadece gradle daemon için geçerlidir, görünüşe göre ... Her halükarda, fork'u true ve forkOptions.'e kullanmak istediğiniz jdk'ye ayarlamayı deneyin: link
Ray Stojonic

Yanıtlar:


292

İki yol

  1. In gradle.propertiesde .gradlesenin dizine HOME_DIRECTORYsetiorg.gradle.java.home=/path_to_jdk_directory

veya:

  1. Sizin build.gradle

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

23
gradle.propertiesDe proje düzeyinde tanımlanabilir bkz gradle.org/docs/current/userguide/build_environment.html
Paolo Fulgoni

143
Gradle sarıcı kullanarak yürütüyorsanız, bunu da yapabilirsiniz ./gradlew -Dorg.gradle.java.home=/path_to_jdk_directory. Dokunmak istemiyorsan iyi olur gradle.properties.
david.schreiber

26
Soru, JDK PATH değil VERSION'ın nasıl ayarlanacağıydı, değil mi?
Dims

40
Bu şekilde projeyi java farklı yollarda olan diğer geliştiricilerle paylaşamıyorum.
Dims

10
Açıklanması gereken seçenekler 1 ve 2 arasında bir fark vardır: 1. seçenekte, derleyici görevini çalıştırmak için kullanılacak olan javm için JVM'yi kendisinin çalışacak şekilde ayarlıyoruz (javac'ın kendisinin bir java uygulaması olduğuna dikkat edin). 2. seçenek sadece javac'ı kendi JVM'sinde üretilecek şekilde ayarlıyoruz. Herhangi bir nedenle, sınıf için belirli bir JVM'ye ihtiyacımız olursa (örneğin, Java 8 için belirli bir sınıflandırma eklentisi derlenir), o zaman derleme işlemi için ayrı bir JVM istemek zorunda kalırız.
Basel Shishani

147

Gradle.properties dosyasına JDK_PATH eklerseniz derlemeniz o yola bağımlı olur. Bunun yerine Gradle görevini aşağıdaki komut satırı parametresiyle çalıştır

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

Bu şekilde yapınız somut bir yola bağımlı değildir.


3
Eclipse'de (Neon, 4.6) Java Home'u Gradle derleme yapılandırmasında da ayarlayabilirsiniz (bkz. "Java Home" sekmesi). 20+ işiniz varsa bu biraz sıkıcı bir iş ... Gradle'ın gerçekten sistemin yapılandırmasından Java Home dizinini seçmesi gerektiğini düşünüyorum!
Markus L

1
Bu adil bir nokta. Yüklü geçerli sürüme /usr/lib/java/jdk/homeişaret eden bir soft-link var . Tabii ki belirli bir sürümü (örneğin u51) istediğinizde, yol hakkında spesifik olmanız gerekir. Ayrıca bazı araçlar, kaleyi başlatmak istiyor, JDK'yi çakıl verdikleri ortamda ayarlamıyor gibi görünüyor. Ve bir geliştirme oturumu olmadıkça JDK'yı şimdiki JAVA_HOME olarak ayarlamamıştım.
olacak

6
JDK_PATH'nin tırnak içinde olsa bile Windows'ta boşlukları olmayacağını unutmayın: "Program Files" ı PROGRA~1(tümü büyük harf) veya DIR / X'in söylediği her şeyi değiştirin.
Noumenon

2
Gradle wrapper kullanıyorsanız komutu aşağıdaki gibi çağırın ./gradlew build -Dorg.gradle.java.home = / JDK_PATH JDK_PATH yerine '/opt/java/jdk1.7.0_79/bin/' gibi jdk konumunuzu değiştirin
mirmdasif

3
"... gradle itself (either standalone distribution or wrapper) uses JDK from JAVA_HOME environment variable or (if it is not set) from PATH".Bunu düzeltmek için gradlew çağrıdan önce JAVA_HOME belirttim. (ie. env JAVA_HOME=/path/to/java gradlew war --stacktrace)
TekiusFanatikus

110

Maven mülkünün maven.compiler.source(veya <source>1.8</source>) Gradle eşdeğerini ararken burada sona eren kişilere :

Build.gradle içinde bunu

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

Bu konudaki Gradle belgelerine bakın .


1
Bu benim için çalıştı ama ben "eklenti uygulamak için" java '"eklentisini uygula" değiştirmek zorunda kaldı:' java '"(iki nokta üst üste)
will.fiset 15:18

10
morgwai - bu açıkça "İstediğim [ayarlamak için] bir değişken (geliştirici makinesi başına tanımlanmış) bina için kullanılacak bir JDK kurulumuna işaret eden soran sorunun cevabı değil tüm uygulama ". Yukarıda verilen cevaplar doğrudur; bu cevap tamamen farklı bir soru içindir.
Jules

1
Javadoc görevi (Java 9'a göre javadoc'u üretmeye çalışan ve projemde Java 8'i kullanması belirtilen modüller ile oluşturmaya çalışan) gibi araçlar tarafından yoksayılır.
CLOVIS

20

Gradle wrapper kullanarak yürütüyorsanız, komutu JDK yolu ile aşağıdaki gibi çalıştırabilirsiniz

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


5

Linux ve kepçe sarıcı kullanıyorsanız, aşağıdaki çözümü kullanabilirsiniz.

Local.properties dosyasına yol ekleyin:

javaHome=<path to JDK>

Gradlew script dosyanıza ekleyin:

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

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

Bu çözümde, her geliştirici kendi JDK yolunu ayarlayabilir. Dosya local.propertiessürüm kontrol sistemine dahil edilmemelidir.


5

Bu satırı GRADLE_HOME / bin / gradle dosyama ekledim - export JAVA_HOME=/path/to/java/version


4

Takip etmek için bir seçenek daha var. Sınıflandırma görevlerinizde istediğiniz jdk yolunu ayarlayabilirsiniz. (Sorunun gönderilmesinden bu yana bir süre geçtiğini biliyorum. Bu cevap birine yardımcı olabilir.)

Konuşlandırmaya veya başka bir göreve sağ tıklayın ve "Gradle Run Yapılandırmasını Aç ..." seçeneğini seçin.

resim açıklamasını buraya girin

Sonra "Java Home" 'a gidin ve istediğiniz java yolunu yapıştırın.

resim açıklamasını buraya girin

Lütfen kutunun sınıflandırma görevinin kendisi tarafından ekleneceğini unutmayın. Bu yüzden yola "bin" eklemeyin.


Gradle görevlerini görmüyorum
Paul McCarthy


1

Windows için derecelendirme görevi tırnak içinde jdk 11 yol parametresi ile çalıştırın

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

0

Gradle'da görüldüğü gibi (Eclipse eklentisi)

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

Gradle, yolunuzda bulduğu JDK'yı kullanır (kontrol etmek için java sürümünü kullanın). Alternatif olarak, JAVA_HOME ortam değişkenini istediğiniz JDK'nın yükleme dizinine işaret edecek şekilde ayarlayabilirsiniz.


Bu Eclipse eklentisini veya Enide Studio 2014'ü kullanıyorsanız, (Tercihler'de ayarlanır) kullanmak için alternatif JAVA_HOME sürümü 0.15 olacaktır, bkz. Http://www.nodeclipse.org/history


1
Merhaba Paul, aslında, bu benim sorunum. Grad oluşturma görevleri için JAVA_HOME'da tanımlanandan farklı bir JDK tanımlamak istiyorum. Yine de, bunun için tutulma eklentisinde bir giriş olacağını bilmek güzel :)
bully

Standart Eclipse, başlatma yapılandırması başına ortam değişkenlerini tanımlamayı sağlar. Ama şenlikle denediğimiz bu değil. Bu soruyu daha ayrıntılı incelerseniz
Paul Verest

0

Gradle 4.2 kullanıyorum. Varsayılan JDK Java 9'dur. Java 9'un ilk günlerinde Gradle 4.2, JDK 8 üzerinde doğru şekilde çalışır (JDK 9 değil).

JDK'yı dosyada şu şekilde manuel olarak ayarladım %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+ kullanıyorsanız, bunu yapabilirsiniz:

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

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

Aşağıdaki ilgili sorunları da görebilirsiniz:



0

Kotlin DSL kullanıyorsanız, build.gradle.ktsek olarak:

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

Tabii ki, Windows işletim sisteminizin olduğunu ve javacderleyicinin yolda olduğunu varsayıyorum C:\bin\jdk-13.0.1\bin\javac. Linux için OS benzer olacak.


-1

Belirli bir komutu çalıştırmak için sadece bir kez ayarlamak istiyorsanız:

JAVA_HOME=/usr/lib/jvm/java-11-oracle/ gw build
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.