【问题标题】:Gradle building android project with Java 1.8 even though java gradle toolchain is set to jdk 11即使 java gradle 工具链设置为 jdk 11,Gradle 也使用 Java 1.8 构建 android 项目
【发布时间】: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 看看我的回答。

标签: android kotlin gradle android-gradle-plugin android-jetpack-compose


【解决方案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

【讨论】:

  • 在遇到大量 stackoverflow 问题并弄乱了我的 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

【讨论】:

    猜你喜欢
    • 2021-01-17
    • 2020-02-20
    • 1970-01-01
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-20
    相关资源
    最近更新 更多