使用 gradle 包装器构建的 Kotlin 枚举 Class 中的无效方法声明
Invalid Method Declaration in Kotlin Enum Class building with gradle wrapper
我有以下 Kotlin 枚举 class:
enum class DurationModifier {
GreaterThan {
override val displayName = "≥"
},
LessThan {
override val displayName = "≤"
};
abstract val displayName: String
}
它已经成为我项目的一部分很长时间了,并且编译得很好。这使用 IntelliJ 或 Android Studio 编译得很好,但是当我 运行 从命令行手动构建 gradle 时 (./gradlew assembleDebug
) 我得到这个:
e: {projectDir}/build/tmp/kapt3/stubs/{package}/search/DurationModifier.java:17: error: invalid method declaration; return type required
DurationModifier() {
^
我已经完全清理了所有我能想到的东西(构建目录、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 8 字节代码,Java11 编译器应该理解(我在 build.gradle), 但在这种情况下显然不是这样。
这并不是为什么会发生这种情况的真正答案,但它是一个解决方案。
我在使用抽象枚举函数时遇到了类似的错误。
Gradle 正在使用 JDK 11。
切换到 JDK 8,通过向 gradle.properties
添加 org.gradle.java.home
条目(在您的 HOME/.gradle/gradle.properties
或您的项目规范 gradle.properties
中解决了该问题。
echo 'org.gradle.java.home=PATH_TO_JDK8' >> ~/.gradle/gradle.properties
我也遇到了这个问题,刚刚下载了 Java 8 并在此处更改了项目结构(File\Project 结构)中的 Java 位置:
我有以下 Kotlin 枚举 class:
enum class DurationModifier {
GreaterThan {
override val displayName = "≥"
},
LessThan {
override val displayName = "≤"
};
abstract val displayName: String
}
它已经成为我项目的一部分很长时间了,并且编译得很好。这使用 IntelliJ 或 Android Studio 编译得很好,但是当我 运行 从命令行手动构建 gradle 时 (./gradlew assembleDebug
) 我得到这个:
e: {projectDir}/build/tmp/kapt3/stubs/{package}/search/DurationModifier.java:17: error: invalid method declaration; return type required
DurationModifier() {
^
我已经完全清理了所有我能想到的东西(构建目录、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 8 字节代码,Java11 编译器应该理解(我在 build.gradle), 但在这种情况下显然不是这样。
这并不是为什么会发生这种情况的真正答案,但它是一个解决方案。
我在使用抽象枚举函数时遇到了类似的错误。
Gradle 正在使用 JDK 11。
切换到 JDK 8,通过向 gradle.properties
添加 org.gradle.java.home
条目(在您的 HOME/.gradle/gradle.properties
或您的项目规范 gradle.properties
中解决了该问题。
echo 'org.gradle.java.home=PATH_TO_JDK8' >> ~/.gradle/gradle.properties
我也遇到了这个问题,刚刚下载了 Java 8 并在此处更改了项目结构(File\Project 结构)中的 Java 位置: