По умолчанию поток задач с плагином scala компилирует Java до scala, поэтому импорт scala источников внутри Java вызывает "ошибка: не может найти символ".
Компиляция Scala перед/рядом с Java с Gradle
Ответ 1
Я нашел следующую конфигурацию sourceSet, чтобы устранить проблему:
sourceSets {
main {
scala {
srcDirs = ['src/main/scala', 'src/main/java']
}
java {
srcDirs = []
}
}
Это потому, что исходный набор scala может включать в себя как java, так и scala источники.
Ответ 2
Если ваш Java-код использует некоторые внешние библиотеки, такие как Lombok, использование компилятора scala для сборки java-класса не удастся, так как компилятор scala не знает аннотации.
Мое решение заключается в изменении зависимостей задачи, компиляции scala перед Java.
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") }