gradle - Kotlin编译在终端中失败,但在Intellij中失败

标签 gradle intellij-idea kotlin compiler-errors

我在类里面有以下进口:

import java.net.http.HttpClient
import java.net.http.HttpRequest
import java.net.http.HttpResponse

当我在Intellij内部构建时,依赖关系已得到正确解决,并且没有任何问题。当我在GitHub Actions中运行CI时,也没有任何问题。

但是,当我在macOS终端中运行./gradlew clean build时,它无法解决上述依赖关系。它在compileKotlin步骤上失败。

以下是我的build.gradle文件。
plugins {
    id 'java'
    id 'org.jetbrains.kotlin.jvm' version '1.3.60'
}

group 'com.test'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()

}

dependencies {

    // kotlin
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"

    // gson
    implementation 'com.google.code.gson:gson:2.8.6'

    // testing
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.3.1'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.3.1'
    testRuntime('org.junit.jupiter:junit-jupiter-engine:5.4.2')
    testCompile("org.assertj:assertj-core:3.11.1")
}

compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

test {
    useJUnitPlatform()
}



谢谢!

最佳答案

JDK 11中引入了 java.net.http API。从终端运行Gradle build时出现 Unresolved reference 错误的原因很可能是在那里使用的JDK较低版本。

默认情况下,compileKotlin任务使用与用来启动Gradle构建本身的JDK相同的JDK。

Gradle通过JAVA_HOME环境变量或通过在PATH中查找java命令来检测JDK的路径。因此,为Gradle指定JDK的最可靠方法是将终端中的JAVA_HOME环境变量设置为所需的JDK路径。

另外,compileKotlin任务可以使用与Gradle中的默认JDK不同的JDK。因此,例如,即使Gradle与JDK 8一起运行,它也可以针对JDK 11进行编译。这是使用jdkHome编译器选项设置的:

compileKotlin {
    kotlinOptions.jdkHome = "path_to_jdk_here"
}

在此处查看Kotlin/JVM编译任务的其他选项:https://kotlinlang.org/docs/reference/using-gradle.html#attributes-specific-for-jvm

关于gradle - Kotlin编译在终端中失败,但在Intellij中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59231205/

相关文章:

Kotlin 数据类 : how to set a property if I don't know its name at compile time?

gradle - 处理gradle任务依赖项

java - 复制带有完整包名的代码

git - 在 intellij - Git 中填充新的远程分支

java - 如何将 AIDE 项目导入 IntelliJ?

kotlin - Kotlin/Java 中的简单转换

reflection - 如何使用 Kotlin 反射更改成员字段?

java - -Dwebdriver.chrome.driver 中的 -D 是什么意思

android - 在单独的模块中进行 Espresso 测试

gradle - 如何防止Gradle导出依赖项?