Java 我如何告诉Gradle使用特定的JDK版本?

Java 我如何告诉Gradle使用特定的JDK版本?,java,gradle,build.gradle,Java,Gradle,Build.gradle,我不知道该怎么做 情景: 我有一个用gradle构建的应用程序 应用程序使用JavaFX 我想要什么 使用一个变量(每个开发人员机器定义),该变量指向JDK的安装,该安装将用于构建整个应用程序/测试/ 我考虑使用gradle.properties文件定义变量。差不多 JAVA_HOME_FOR_MY_PROJECT=<path to my desired JDK> JAVA\u HOME\u用于我的项目= 我不想要什么 指向所需JDK的JAVA_HOME 我可以接受许

我不知道该怎么做

情景:

  • 我有一个用gradle构建的应用程序
  • 应用程序使用JavaFX
我想要什么

  • 使用一个变量(每个开发人员机器定义),该变量指向JDK的安装,该安装将用于构建整个应用程序/测试/
我考虑使用
gradle.properties
文件定义变量。差不多

JAVA_HOME_FOR_MY_PROJECT=<path to my desired JDK>
JAVA\u HOME\u用于我的项目=
我不想要什么

  • 指向所需JDK的
    JAVA_HOME
我可以接受许多建议:

  • 定义系统环境变量的解决方案,我可以在build.gradle脚本中检查该变量
  • 在gradle.properties中定义的变量
  • 仅为构建上下文重写JAVA\u HOME变量(类似于
    使用JAVA\u HOME=
  • 还有什么我没想到的
问题:

  • 如何将变量(如何定义,作为
    gradle.properties
    中的变量,系统环境变量,…)连接到构建过程
我有多个JDK7可用,需要指向一个特殊版本(最低JDK_版本)

任何答案都是非常感谢的,我也非常感谢每一个正确方向的提示。

两种方式

  • HOME\u目录中
    gradle.properties
    gradle.properties
    中设置
    org.gradle.java.HOME=/path\u to\u jdk\u目录
  • 或:

  • 在您的
    build.gradle

     compileJava.options.fork = true
     compileJava.options.forkOptions.executable = '/path_to_javac'
    
  • 如图所示

    Gradle使用它在您的路径中找到的JDK(要检查,请使用java-version)。或者,您可以将JAVA_HOME环境变量设置为指向所需JDK的安装目录



    如果您正在使用此Eclipse插件或其他JAVA HOME(在首选项中设置)将在0.15版中使用,请参阅如果您在gradle中添加JDK_路径。属性您的构建将依赖于该特定路径。 使用以下命令行参数运行gradle任务

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

    这样,您的构建就不依赖于具体的路径。

    如果您使用的是linux和gradle包装器,那么您可以使用以下解决方案

    将路径添加到local.properties文件:

    javaHome=<path to JDK>
    

    在这个解决方案中,每个开发人员都可以设置自己的JDK路径。文件
    local.properties
    不应包含在版本控制系统中。

    我在GRADLE\u HOME/bin/GRADLE文件中添加了这一行-
    export JAVA_HOME=/path/to/JAVA/version
    当搜索Maven属性的Gradle等价物
    Maven.compiler.source
    (或
    1.8
    )时,将JAVA导出到此处:

    在build.gradle中,您可以使用

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

    请参阅。

    我正在使用Gradle 4.2。默认的JDK是Java9。在Java9的早期,Gradle4.2正确地运行在JDK8上(而不是JDK9)

    我像这样手动设置JDK,在文件
    %GRADLE\u 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
    

    还有一个选择。在Eclipse中提供的gradle任务中,可以设置所需的jdk路径。(我知道问题发布已经有一段时间了。这个答案可以帮助别人。)

    右键单击部署或任何其他任务,然后选择“Open Gradle Run Configuration…”

    然后导航到“Java主页”并粘贴所需的Java路径


    请注意,bin将由gradle任务本身添加。因此,不要将“bin”添加到路径中。

    如果使用gradle包装器执行,可以使用JDK路径运行命令,如下所示


    /gradlew-Dorg.gradle.java.home=/jdk\u path\u目录

    有一个gradle插件可以自动下载/引导jdk:


    尚未集成IDE,Windows上需要一个像样的shell。

    如果您只想将其设置一次以运行特定命令:

    JAVA_HOME=/usr/lib/jvm/java-11-oracle/ gw build
    

    如果您使用的是JDK 9+,则可以执行以下操作:

    java {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }
    
    tasks.withType<JavaCompile> {
        options.compilerArgs.addAll(arrayOf("--release", "8"))
    }
    
    java{
    sourceCompatibility=JavaVersion.VERSION\u 1\u 8
    targetCompatibility=JavaVersion.VERSION\u 1\u 8
    }
    tasks.withType{
    options.compilerArgs.addAll(arrayOf(“--release”,“8”))
    }
    
    您还可以看到以下相关问题:

    • 格拉德尔:
    • Gradle的Eclipse插件:
    Android Studio 文件>项目结构>SDK位置>JDK位置>

    /usr/lib/jvm/java-8-openjdk-amd64
    
    德国劳埃德船级社


    如果您使用的是Kotlin DSL,那么在
    build.gradle.kts
    中添加:

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

    当然,我假设您有Windows操作系统,并且
    javac
    编译器位于路径
    C:\bin\jdk-13.0.1\bin\javac
    中。对于Linux操作系统也是如此。

    对于windows,使用引号中的jdk 11 path参数运行gradle任务

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

    因此,我在Android项目中使用IntelliJ,以下解决了IDE中的问题:

    只是因为这可能会帮别人省下我浪费的几个小时。。。 IntelliJ->首选项->构建、执行、部署->构建工具->Maven->Gradle

    并将渐变JVM设置为1.8 确保您还安装了JDK 8


    注意:该项目在命令行中编译得很好

    如果您在
    Intellij IDE中遇到此问题,请尝试以下选项

  • 将Gradle设置为主页

  • 在项目模块设置中设置JDK版本

  • 检查模块中的JDK版本


  • 通过在项目级别
    gradle.properties
    中指定,您可以轻松地指出所需的Java版本。这将影响当前项目,而不是改变整个系统中每个项目的语言级别

    org.gradle.java.home=<YOUR_JDK_PATH>
    
    org.gradle.java.home=
    
    使用现代版本的Gradle(版本6.7+)执行此操作的正确方法是使用

    下一块,
    org.gradle.java.home=<YOUR_JDK_PATH>
    
    java {
      toolchain {
        languageVersion.set(JavaLanguageVersion.of(11))
      }
    }
    
    sudo update-alternatives --config java
    
    gradle -v
    
    # Determine the Java command to use to start the JVM.
    if [ -n "$JAVA_HOME" ] ; then
        if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
            # IBM's JDK on AIX uses strange locations for the executables
            JAVACMD="$JAVA_HOME/jre/sh/java"
        else
            JAVACMD="$JAVA_HOME/bin/java"
        fi
        if [ ! -x "$JAVACMD" ] ; then
            die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
    
    Please set the JAVA_HOME variable in your environment to match the
    location of your Java installation."
        fi
    else
        JAVACMD="java"
        which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
    
    Please set the JAVA_HOME variable in your environment to match the
    location of your Java installation."
    fi