В чем проблема с этим файлом SBT?
Когда я импортирую проект SBT в intelliJ, файл build.sbt показывает много ошибок, как показано на следующем снимке экрана. Интересно, в чем может быть проблема
ИДЕЯ Версия 13.1.4
Я также вижу следующее
The following source roots are outside of the corresponding base directories:
C:\Users\p0c\Downloads\recfun\src\main\resources
C:\Users\p0c\Downloads\recfun\src\test\java
C:\Users\p0c\Downloads\recfun\src\test\scala
C:\Users\p0c\Downloads\recfun\src\test\resources
These source roots cannot be included in the IDEA project model. Please consider using shared SBT projects instead of shared source roots.
1 ответ
Я думаю, что вопрос, возможно, не дает всей необходимой информации для окончательного ответа, но я все равно опишу его -
Поскольку sbt работает правильно при вызове из оболочки, мы знаем, что файл sbt в порядке. Я использую Idea для своих проектов Scala и sbt, и я уверен, что поддержка Idea sbt работает очень хорошо, но! Идея гораздо более ограничительна, чем sbt, когда дело доходит до структуры проекта. Действительно легко создать правильную структуру проекта sbt, которую Idea не может поддерживать очень хорошо.
Учитывая, что ошибка источника root указывает на то, что папка recfun/src отсутствует в папке проекта, очевидно, что эта ошибка не выдается во время обработки recfun/build.sbt. На снимке экрана показано, что у вас есть как минимум три разных файла sbt: progfun-recfun, submission и scala-recfun. Так как Idea также создаст проекты, такие как submission-build, и у вас там есть проект build-build, возможно, что-то сломано в структуре проекта, не с точки зрения sbt - там все в порядке, вы можете построить - но с помощью Idea точка зрения, которая является более строгой.
Мое предложение решить эту проблему - изменить структуру вашего проекта следующим образом. Во-первых, создайте проект верхнего уровня с build.sbt. Затем создайте подпроект для каждой папки src, которую вы хотите. Не помещайте папку src в ваш проект верхнего уровня. Каждый подпроект также нуждается в build.sbt.
Во-вторых, убедитесь, что подпроекты правильно собираются с sbt при запуске из оболочки. Расположите файлы build.sbt под-проекта с соответствующими зависимостями, используя этот синтаксис:
lazy val a = ProjectRef(file("../a"), "a")
lazy val b = ProjectRef(file("../b"), "b")
lazy val root = Project(id = "c", base = file(".")) dependsOn (a, b)
(В этом примере три дочерних проекта a, b и c, где c зависит от a и b. Три проекта размещаются в каталогах с одинаковыми именами в корневом каталоге. Фрагмент кода взят из файла сборки для c.)
В-третьих, организуйте ваш build.sbt верхнего уровня для агрегирования подпроектов, используя этот синтаксис в build.sbt верхнего уровня:
lazy val a = ProjectRef(file("a"), "a")
lazy val b = ProjectRef(file("b"), "b")
lazy val c = ProjectRef(file("c"), "c")
lazy val root = (project in file(".")).
aggregate(a, b, c)
Построение этого проекта верхнего уровня создаст каждый из подпроектов a, b и c, а зависимости, установленные в файлах сборки подпроекта, обеспечат их построение в правильном порядке.
В-четвертых, импортируйте проект верхнего уровня в Idea, и все должно быть хорошо.
При желании вы можете получить представление о файловой структуре, потому что ссылки на проекты используют относительные пути, но обычно приятно, по крайней мере, начать с простого.
У меня было большое разочарование по поводу sbt и Idea в начале, надеюсь, это поможет:)