Jor*_*ndo 5 android kotlin android-gradle-plugin kapt
我有以下Kotlin枚举类:
enum class DurationModifier {
GreaterThan {
override val displayName = "?"
},
LessThan {
override val displayName = "?"
};
abstract val displayName: String
}
Run Code Online (Sandbox Code Playgroud)
很长时间以来,它一直是我项目的一部分,并且可以很好地进行编译。使用IntelliJ或Android Studio可以很好地进行编译,但是当我从命令行(./gradlew assembleDebug)手动运行gradle build时,我得到了:
e: {projectDir}/build/tmp/kapt3/stubs/{package}/search/DurationModifier.java:17: error: invalid method declaration; return type required
DurationModifier() {
^
Run Code Online (Sandbox Code Playgroud)
我已经彻底清理了所有我能想到的东西(构建目录,gradle缓存等)。
我最近做了很多更改,但是由于IDE一切正常,所以我不知道是什么原因引起的。怎么了 为什么这在IDE中有效但在命令行中无效?
想通了是怎么回事。Android Studio 和 IntelliJ 都使用捆绑的 JDK(AS 3.2.1 使用 1.8.0_152),因此 gradle 在该环境中执行 kapt。但是,在我的机器上,我将 Java 11 设置为默认 java。我使用 JENV 来管理多个 java 版本,所以我预感我将本地 java 版本设置为 1.8 而不是 11。之后工作正常。
我的理解是 Kotlin 编译器应该发出 Java 11 编译器应该理解的 Java 8 字节代码(我在 build.gradle 中配置了 Kotlin 编译器),但显然在这种情况下并非如此。
不是真正的答案为什么会发生,但它是一个解决方案。
| 归档时间: |
|
| 查看次数: |
460 次 |
| 最近记录: |