即使 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-1App 模块 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开发问答