在 Java 之前编译 Scala/与 Gradle 一起编译
2022-09-01 17:11:16
默认的 scala 插件任务流在 Scala 之前编译 Java,因此在 Java 中导入 Scala 源代码会导致“错误:找不到符号”。
默认的 scala 插件任务流在 Scala 之前编译 Java,因此在 Java 中导入 Scala 源代码会导致“错误:找不到符号”。
Java和Scala可以在scala源代码中组合,以将它们联合编译,例如
sourceSets {
main {
scala {
srcDirs = ['src/main/scala', 'src/main/java']
}
java {
srcDirs = []
}
}
如果你的java代码使用一些外部库,比如Lombok,使用scala编译器构建java类将失败,因为scala编译器不知道注释。
我的解决方案是改变任务依赖关系,在Java之前编译Scala。
tasks.compileJava.dependsOn compileScala
tasks.compileScala.dependsOn.remove("compileJava")
现在任务在 之前运行,就是这样。compileScala
compileJava
如果你的java代码依赖于scala代码,你需要再做两个步骤,
将 scala 和 java 的输出文件夹分开,
sourceSets {
main {
scala {
outputDir = file("$buildDir/classes/scala/main")
}
java {
outputDir = file("$buildDir/classes/java/main")
}
}
将 scala 输出添加为 的依赖项,compileJava
dependencies {
compile files("$sourceSets.main.scala.outputDir")
}