jit*_*mar 275 java dependencies kotlin android-gradle-plugin gradle-kotlin-dsl
构建.gradle.kts
buildscript {
repositories {
google()
mavenCentral()
gradlePluginPortal()
}
dependencies {
classpath ("com.android.tools.build:gradle:7.0.2")
classpath ("org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.30")
classpath("gradle.plugin.com.github.spotbugs.snom:spotbugs-gradle-plugin:${Versions.spotbugsGradlePluginVersion}")
classpath("se.bjurr.violations:violations-gradle-plugin:${Versions.violationsVersion}")
}
}
//android {
// compileOptions {
// sourceCompatibility = JavaVersion.VERSION_11
// targetCompatibility = JavaVersion.VERSION_11
// }
//
// kotlinOptions {
// jvmTarget = JavaVersion.VERSION_11.toString()
// }
//}
plugins {
`maven-publish`
`java-gradle-plugin`
`kotlin-dsl`
id ("io.gitlab.arturbosch.detekt") version ("1.18.1")
}
repositories {
google()
mavenCentral()
gradlePluginPortal()
}
dependencies {
compileOnly(gradleApi())
testImplementation(gradleTestKit())
testImplementation("junit:junit:${Versions.jUnitVersion}")
}
val generatedSources = tasks.register<GenerateVersionsFileTask>("generateSources")
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
错误:“compileJava”任务(当前目标是 11)和“compileKotlin”任务(当前目标是 1.8)jvm 目标兼容性应设置为相同的 Java 版本。
当我取消注释时android {}
,我得到:
错误:脚本编译错误:
Run Code Online (Sandbox Code Playgroud)Line 15: android { ^ Unresolved reference: android
Ree*_*esh 234
我们还需要注意错误显示的版本。就我而言,是:
引起原因:org.gradle.api.GradleException:“compileDebugJavaWithJavac”任务(当前目标是 1.8)和“compileDebugKotlin”任务(当前目标是 17)jvm 目标兼容性应设置为相同的 Java 版本。
这意味着,Android Studio IDE 使用的是 17(您可以在“文件菜单”->“项目结构”->“SDK 位置”->“JDK 位置”中找到它)
并且您在 gradle 文件中使用 1.8。
所以你需要改变
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
Run Code Online (Sandbox Code Playgroud)
和
kotlinOptions {
jvmTarget = '1.8'
}
Run Code Online (Sandbox Code Playgroud)
到
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
Run Code Online (Sandbox Code Playgroud)
和
kotlinOptions {
jvmTarget = '17'
}
Run Code Online (Sandbox Code Playgroud)
注意
由于错误显示为17,所以我也切换到了17。
当我将 gradle 升级到 8.0 时发生这种情况。
注意发布问题。请在执行该过程之前进行备份。发布 aab 时可能会遇到问题。
确保在完成此过程后检查发布的 apk,因为 R8 期望这样的事情
小智 140
您可以使用以下命令设置 java 的 java 版本
java {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
Run Code Online (Sandbox Code Playgroud)
或者:
java {
toolchain.languageVersion.set(JavaLanguageVersion.of(11))
}
Run Code Online (Sandbox Code Playgroud)
对于 kotlin 来说:
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>().configureEach {
kotlinOptions {
jvmTarget = "11"
}
}
Run Code Online (Sandbox Code Playgroud)
所有示例均位于 gradle kotlin dsl 中。
LXJ*_*LXJ 56
@Marian 的回答对我没有太大帮助。
我最终在应用程序 build.gradle 中设置以下内容
android {
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}
kotlinOptions {
jvmTarget=11
}
...
}
Run Code Online (Sandbox Code Playgroud)
Pas*_*cal 38
为了在“Java 和 Kotlin”中拥有“相同版本的 Java”,只需修改build.gradle文件,如下所示(针对 Java 11 给出的示例):
apply plugin: \'com.android.application\'\napply plugin: \'kotlin-android\'\n...\nandroid {\n ...\n compileOptions {\n sourceCompatibility JavaVersion.VERSION_11\n targetCompatibility JavaVersion.VERSION_11\n }\n\n // New syntax (credit goes to \xca\x8d\xd1\xb3\xd1\x92\xe0\xaa\xbd\xe0\xab\xaf\xe0\xb8\x97 in comment)\n kotlin {\n jvmToolchain(11)\n }\n/*\n FYI: Old syntax:\n kotlin {\n jvmToolchain {\n languageVersion.set(JavaLanguageVersion.of("11"))\n }\n }\n FYI: Deprecated syntax:\n kotlinOptions {\n jvmTarget = "11"\n }\n*/\n ...\n}\n
Run Code Online (Sandbox Code Playgroud)\n我的配置:
摇篮:
\n科特林:
\n关于新语法:
\n请参阅JVM 工具链配置的新方法
注意:
\n有关该问题的 Kotlin 配置的更多信息可在此处找到:\n https://blog.jetbrains.com/kotlin/2021/11/gradle-jvm-toolchain-support-in-the-kotlin-plugin/
Des*_*eto 29
将 Android Studio 更新到 Flamingo 版本后我遇到了同样的问题,这是我在 build.gradle 中的新配置
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = '17'
}
Run Code Online (Sandbox Code Playgroud)
小智 15
我首先尝试对所有模块使用以下代码
compileOptions {
sourceCompatibility = '1.8'
targetCompatibility = '1.8'
}
kotlinOptions {
jvmTarget = '1.8'
}
Run Code Online (Sandbox Code Playgroud)
将以下行添加到 gradle.properties 后解决了问题。
kotlin.jvm.target.validation.mode = IGNORE
Run Code Online (Sandbox Code Playgroud)
Nik*_*las 14
这对我来说效果很好:
kotlin {
jvmToolchain {
languageVersion.set(JavaLanguageVersion.of("11"))
}
}
Run Code Online (Sandbox Code Playgroud)
这样我只需要设置一次。
小智 8
allprojects {
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>().configureEach {
kotlinOptions {
jvmTarget = JavaVersion.VERSION_1_8.toString()
}
}
}
Run Code Online (Sandbox Code Playgroud)
通过将此任务包含在您的 build.gradle 中,告诉编译器在您的项目中使用 JavaVersion = 1.8。
如果有人不断收到有关 java 编译任务设置为 java 1.8 的警告,您可以将其添加到 gradle 脚本中:
afterEvaluate {
tasks.withType<JavaCompile>().configureEach {
sourceCompatibility = JavaVersion.VERSION_11.toString()
targetCompatibility = JavaVersion.VERSION_11.toString()
}
}
Run Code Online (Sandbox Code Playgroud)
我在 AS 上的一些 java 编译任务上收到警告,这为我解决了这个问题。
需要应用玛丽安的解决方案(见上文),但您可能仍然会看到与警告相同的消息,特别是如果您从命令行运行“gradle build”。我认为如果您从 Android Studio 与 gradle“同步”,您可能看不到警告消息。如果正确应用玛丽安的解决方案后您仍然看到该消息,则这显然是一条虚假的警告消息。我的理解是,一旦您升级到使用 kotlin 1.6+,虚假警告消息就会消失。您可以通过将以下内容添加到 gradle.properties 文件来禁用此虚假警告。
kotlin.jvm.target.validation.mode = IGNORE
Run Code Online (Sandbox Code Playgroud)
我不建议使用上述内容,但我确实解决了看到虚假警告消息的问题。如果您确实使用它,请记住在不再需要时将其删除。
对于我们大多数人来说,问题是目前无法升级到 kotlin 1.6.21。为了升级到 kotlin 1.6.21,您需要升级到 android gradle 7.4。要升级到 android gradle 7.4,您需要高于 Dolphin 的 Android Studio 版本 | 2021.3.1,因此此时您必须使用 Android Studio 的预览版本之一来执行此操作。
有关兼容性信息,请参阅 https://developer.android.com/studio/releases/gradle-plugin和 https://developer.android.com/studio/releases#android_gradle_plugin_and_android_studio_compatibility
我通过使用相同的 Java 版本解决了这个问题:
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = '17'
}
Run Code Online (Sandbox Code Playgroud)
令人惊讶的是,罪魁祸首非常简单。你需要KotlinCompile
先声明你的任务JavaCompile
。像这样
tasks {
withType<KotlinCompile> {
kotlinOptions {
freeCompilerArgs = listOf(
"-Xextended-compiler-checks",
"-Xinline-classes",
"-Xjsr305=strict",
"-Xjvm-default=all",
"-Xskip-prerelease-check",
)
apiVersion = "1.8"
languageVersion = "1.8"
jvmTarget = "11"
}
}
withType<JavaCompile> {
sourceCompatibility = "11"
targetCompatibility = "11"
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
233516 次 |
最近记录: |