即使 java gradle 工具链设置为 jdk 11,Gradle 也使用 Java 1.8 构建 android 项目

Posted

技术标签:

【中文标题】即使 java gradle 工具链设置为 jdk 11,Gradle 也使用 Java 1.8 构建 android 项目【英文标题】:Gradle building android project with Java 1.8 even though java gradle toolchain is set to jdk 11 【发布时间】:2021-03-27 16:50:15 【问题描述】:
FAILURE: Build failed with an exception.
* Where:
Build file '/bitrise/src/app/build.gradle' line: 1
* What went wrong:
A problem occurred evaluating project ':app'.
> Failed to apply plugin 'com.android.internal.application'.
   > Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8.
     You can try some of the following options:
       - changing the IDE settings.
       - changing the JAVA_HOME environment variable.
       - changing `org.gradle.java.home` in `gradle.properties`.

Gradle 检测本地安装的 JVM Gradle 选择与构建要求匹配的 JRE/JDK(在本例中为支持 Java 14 的 JVM) 如果没有找到匹配的JVM,它会自动从AdoptOpenJDK下载一个匹配的JDK

Android Gradle 插件是否支持新的 gradle 工具链? https://docs.gradle.org/current/userguide/toolchains.html

著名的库/插件/版本

运行 AGP 7.0.0-alpha03 Kotlin 1.4.21 Android Studio 北极狐金丝雀 3 jvmTarget 1.8 gradle 包装器 6.8-rc-1

App 模块 gradle 配置如下(删除了一些细节)

android 

    java 
        toolchain 
            languageVersion = JavaLanguageVersion.of(11)
        
    

    kotlinOptions 
        jvmTarget = Versions.jdkNumber
        useIR = true
    

    buildToolsVersion Config.buildToolsVersion
    compileSdkVersion Config.compileSdk

    buildFeatures 
        compose true
        dataBinding true
    

    composeOptions 
        kotlinCompilerVersion Versions.kotlin_version
        kotlinCompilerExtensionVersion Versions.compose
    

    androidExtensions 
        experimental = true
    

【问题讨论】:

有什么消息吗? @LMaker 看看我的回答。 【参考方案1】:

你可以看看这个。我有一个类似的问题,它为我解决了这个问题。这是 Gradle 自己的“sn-p”代码,用于解决您面临的问题。

import org.jetbrains.kotlin.gradle.dsl.KotlinJvmCompile

plugins 
    id "org.jetbrains.kotlin.jvm" version "1.4.20"


repositories 
    jcenter()


// tag::compiler-kotlin[]
def compiler = javaToolchains.compilerFor 
    languageVersion = JavaLanguageVersion.of(11)


tasks.withType(KotlinJvmCompile).configureEach 
    kotlinOptions.jdkHome = compiler.get().metadata.installationPath.asFile.absolutePath

// end::compiler-kotlin[]

这是在https://github.com/gradle/gradle/blob/master/subprojects/docs/src/snippets/java/toolchain-kotlin/groovy/build.gradle找到的

我在 https://github.com/7ep/r3z/blob/51cc69bb6396c34f0507b67763487c9bc171a03e/build.gradle#L36 将它合并到我的项目中

祝你好运!

拜伦

【讨论】:

导入命令是否应该在 build.gradle 文件中开箱即用?我的项目中没有连接 - 无法解析符号 KotlinJvmCompile。【参考方案2】:

刚刚通过在项目根文件夹中添加jitpack.yml文件解决了这个问题:

jdk:
  - openjdk11
帮助阅读:https://ayoubbenkhemis.medium.com/publish-android-library-with-jitpack-be00a29a8174

【讨论】:

在遇到大量 *** 问题并弄乱了我的 jdk 设置之后,这个解决方案终于帮助了我。非常感谢。【参考方案3】:

我遇到了同样的问题,发现 Bitrise Ubuntu Stack 正在使用 Java 8。为了切换到 Java 11,需要一个脚本步骤。请按照以下说明操作。

在以任何方式使用 Java 的任何步骤之前向工作流添加一个脚本步骤。 最简单的方法是将其作为工作流程的第一步。 将以下命令添加到 Step 的 Script 内容输入中:

sudo update-alternatives --set javac /usr/lib/jvm/java-11-openjdk-amd64/bin/javac
sudo update-alternatives --set java /usr/lib/jvm/java-11-openjdk-amd64/bin/java

export JAVA_HOME='/usr/lib/jvm/java-11-openjdk-amd64'
envman add --key JAVA_HOME --value '/usr/lib/jvm/java-11-openjdk-amd64'

以上信息来自 Bitrise 文档。如果您想阅读更多内容,请点击下面的链接。 https://devcenter.bitrise.io/infrastructure/virtual-machines/#switching-to-java-11

【讨论】:

以上是关于即使 java gradle 工具链设置为 jdk 11,Gradle 也使用 Java 1.8 构建 android 项目的主要内容,如果未能解决你的问题,请参考以下文章

Eclipse使用gradle编译时,设置java home,使用固定的jdk版本进行编译

即使设置正确,Gradle 也会发现错误的 JAVA_HOME

如何用jenkins+gradle一次性构建多个java工程

gradle怎么设置jdk版本,不用系统环境变量的jdk-Android开发问答

如何将 Gradle 项目中 Kotlin 的字节码版本设置为 Java 8?

使用不支持我的 JDK 版本 (17) 的 Gradle 6.7.1 的 LibGDX 项目创建工具