我在一个班级有以下进口物品:
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()
}
谢谢!
答案 0 :(得分:1)
java.net.http
API是JDK 11中引入的。从终端运行Gradle build时出现未解决的参考错误的原因很可能是在那里使用的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