【发布时间】:2021-10-11 12:54:17
【问题描述】:
我目前正在使用 Scala 和 Java 进行项目。我们想在 Java 上重写一些 Scala 代码。所以当我开始重写我的代码时,我遇到了这个问题。
CountryResponse.java:5: illegal start of type declaration
Scala 似乎无法编译 JDK 16 中引入的 Java 记录。我做了一些研究,在 GitHub 上只找到了this discussion。有人可以建议任何解决方法来编译 Java 的记录吗?
我确实尝试将 Scala 版本从 2.12.2 提高到 2.13.6,但问题没有解决。
我们使用 Java 16、Scala 2.12.2 和 Gradle 7.0.1 以及 Gradle 的 scala 和 java 插件。
这里也是我的 gradle 用于编译两个源的设置。
compileScala {
sourceCompatibility("16")
targetCompatibility("16")
}
sourceSets {
main {
java {
srcDirs = []
}
scala {
srcDirs = ['src/main/scala', 'src/main/java']
}
}
}
编辑:更新讨论链接
【问题讨论】:
-
Scala 不编译任何东西。您的构建工具(在本例中为 gradle)编译您的项目,其中可能包含 Java、Scala 和 Kotlin 代码。这 -
CountryResponse.java:5: illegal start of type declaration与 Scala 无关,与 gradle 无关。您需要正确配置您的 gradle 项目才能编译 Java 16 代码。 -
你的Java源码版本相关配置在哪里?另外,系统jdk版本是多少?如果不是 Java 16(或更高版本),那么无论您使用 gradle 做什么,jdk 都无法编译它。此外,为了让您的 Scala 代码在 Java 16 下工作,Scala 的兼容版本是 Scala 2.13 的 2.13.5 和 Scala 2.12 的 2.12.14。
-
@sarveshseri 感谢您的回复!是的,你对编译绝对是正确的......我不清楚这些有问题的东西,抱歉。我的另一个项目在 java 16 上运行良好。系统 jdk 也是 16 版本。 gradew compileScala 运行时出现错误。
-
为什么在 scala
srcDirs中有'src/main/java'?如果您也在使用 Gradle Scala 插件来处理 Java 16 文件,那么您可以将其从 javasrcDirs中删除。 -
我在 scala 上的代码依赖于 java 类的源代码