Поддержка IntelliJ IDEA для неизменяемых с sbt
При использовании библиотеки java immutables с IDEA и sbt компиляция и запуск кода работают нормально, но редактор выдает ошибки "Не удается разрешить символ..." и "Не удается разрешить метод..." при использовании сгенерированных классов.
Следование документации по настройке IDE работает нормально для Maven, но не решает проблемы с sbt.
Как мы можем получить поддержку редактора и завершение кода для сгенерированных источников в IDEA с помощью sbt?
1 ответ
Во-первых, следуйте инструкциям в документации.
Чтобы настроить обработку аннотаций в IntelliJ IDEA, используйте диалоговое окно "Параметры"> "Параметры проекта"> "Компилятор"> "Процессоры аннотаций".
Далее, проблема в том, что sbt помещает наши сгенерированные исходные файлы в target/scala-2.n/classes/our/package
, Это каталог для скомпилированных .class
файлы, поэтому нам нужно, чтобы наши источники были сгенерированы в другом месте. Редактирование настроек IDEA нам здесь не поможет, поэтому нам нужно отредактировать build.sbt
добавив следующее:
// tell sbt (and by extension IDEA) that there is source code in target/generated_sources
managedSourceDirectories in Compile += baseDirectory.value / "target" / "generated_sources"
// before compilation happens, create the target/generated_sources directory
compile in Compile <<= (compile in Compile).dependsOn(Def.task({
(baseDirectory.value / "target" / "generated_sources").mkdirs()
}))
// tell the java compiler to output generated source files to target/generated_sources
javacOptions in Compile ++= Seq("-s", "target/generated_sources")
Наконец, мы должны сказать IDEA, что не все в target/
следует игнорировать, удалив исключение в этом каталоге. Либо перейдите в файл> Структура проекта> Настройки проекта> Модули, щелкните target
каталог и отмените выбор "Исключено". Или щелкните правой кнопкой мыши target
каталог на вкладке Проект, Пометить каталог как> Отменить исключение.
На этом этапе вы должны увидеть, что поддержка редактора работает, а если нет, запустите sbt clean compile
чтобы убедиться, что источники были созданы.