Gradle Kotlin DSL 找不到 java.io 包

Hen*_*cha 13 android gradle kotlin gradle-kotlin-dsl

我正在尝试将 Android 应用程序的 build.gradle 文件转换为 Kotlin DSL。这个文件有一个这样的功能:

def getLastCommitHash() {
    def stdout = new ByteArrayOutputStream()
    exec {
        commandLine 'git', 'rev-parse', '--short', 'HEAD'
        standardOutput = stdout
    }
    return stdout.toString().trim()
}
Run Code Online (Sandbox Code Playgroud)

我将其转换为:

fun getLastCommitHash() {
    val stdout = ByteArrayOutputStream()
    exec {
        commandLine("git", "rev-parse", "--short", "HEAD")
        standardOutput = stdout
    }
    return stdout.toString().trim()
}
Run Code Online (Sandbox Code Playgroud)

我收到Unresolved reference: ByteArrayOutputStream错误并应用导入,将其更改为java.io.ByteArrayOutputStream()显示Unresolved reference: io错误。

我做错了什么吗?提前致谢。

Chr*_*iki 10

在块之前java.io执行时从作品导入。我可以使用以下命令成功运行 Gradle 7.3.2 和 6.9.2 的构建:pluginsbuild.gradle.kts

import java.io.ByteArrayOutputStream

plugins {
    `java-library`
}

println(ByteArrayOutputStream::class)
Run Code Online (Sandbox Code Playgroud)

如果您转义完整的包名称,那么您也可以在不导入类的情况下使其工作(如上测试):

plugins {
    `java-library`
}

println(`java.security`.MessageDigest::class)
Run Code Online (Sandbox Code Playgroud)


est*_*stn 6

我在 intellij idea 的后端项目中遇到了这个问题,我在文件顶部添加了这个导入build.gradle

import java.io.ByteArrayOutputStream
Run Code Online (Sandbox Code Playgroud)

现在它起作用了。


Hen*_*cha 1

这是 Android Studio 3.5.6 的问题。升级到 Android Studio 3.6 后一切正常。