【问题标题】:Gradle Kotlin DSL can't find java.io packageGradle Kotlin DSL 找不到 java.io 包
【发布时间】:2020-01-06 16:29:53
【问题描述】:

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

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

我转换成这个:

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

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

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

【问题讨论】:

  • this answer 中找到几乎相同的函数并将其转换后,我遇到了同样的问题。因提出我的确切问题而被投票赞成。
  • 在 gradle/kotlin 中,java 值隐藏了包名,使得从java.* 导入任何东西几乎是不可能的 这个问题的答案将回答“你如何引用 java 包名,而它是被 kotlin 中的变量遮蔽了?”

标签: android gradle kotlin gradle-kotlin-dsl


【解决方案1】:

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

import java.io.ByteArrayOutputStream

现在它可以工作了。

【讨论】:

  • 这似乎不适用于 build.gradle.kts aka KOTLIN,就像问的问题一样。
【解决方案2】:

java.io 导入在plugins 块之前 起作用。我可以使用以下build.gradle.kts 成功运行 Gradle 7.3.2 和 6.9.2 的构建:

import java.io.ByteArrayOutputStream

plugins {
    `java-library`
}

println(ByteArrayOutputStream::class)

如果你escape完整包名,那么你也可以在不导入类的情况下让它工作(如上测试):

plugins {
    `java-library`
}

println(`java.security`.MessageDigest::class)

【讨论】:

  • 最初对我来说发生了一些奇怪的事情,因为 IntelliJ 似乎不愿意将导入添加到 build.gradle.kts,并且它会用警告突出显示导入。当然,我现在似乎无法重现它。 (我的问题是 java.security.MessageDigest)这也是我最终得到的解决方案,但它仍然让我想知道在提到长名称时是否有任何方法可以逃避阴影。
  • 我相信我已经找到了办法,请查看我的更新答案。
【解决方案3】:

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

【讨论】:

  • 我有这个问题,它不是使用 Android Studio 而是 IntelliJ。
【解决方案4】:

我的观察:

  • 关闭项目
  • 删除.idea.gradle 文件夹
  • 通过选择 root-build.gradle.kts 和“作为项目打开”打开项目

确实有帮助。

【讨论】:

    猜你喜欢
    • 2021-10-18
    • 2015-04-16
    • 2019-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-21
    • 2015-11-19
    • 2017-10-27
    相关资源
    最近更新 更多