Поддержка 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 чтобы убедиться, что источники были созданы.

Другие вопросы по тегам