Когда происходит инкрементная компиляция IntelliJ Scala?

Когда происходит инкрементная компиляция IntelliJ Scala? Я заметил, что внесение изменений в файл не приводит к обновлению соответствующих файлов.class (в /target). Когда это происходит?

1 ответ

Решение

Я думаю, вы неправильно понимаете, как работает инкрементная компиляция Scala.

Есть две разные вещи, которые можно назвать "Инкрементная компиляция Scala IntelliJ":

1) Правильная инкрементная компиляция Scala, которая представляет собой более или менее набор типовых стратегий, применимых для разных языков программирования, чтобы не перекомпилировать все заново, когда вы нажмете кнопку "Компилировать". Основная идея заключается в том, что система сборки может заметить, что определенные файлы и все их зависимости не изменились со времени последней компиляции, и, таким образом, вам не нужно их перекомпилировать, и вы можете вместо этого использовать результат последней компиляции. Эти эвристики на самом деле сложны для Scala, поскольку это сложный язык. Некоторые идеи о том, что можно сделать, описаны в документе SBT "Понимание поэтапной перекомпиляции". В какой-то момент JetBrains решили, что они умнее, и реализовали свой набор эвристик, и они утверждают, что они лучше (т.е. инкрементная компиляция быстрее), поэтому теперь вы выбрали между SBT и на основе Idea инкрементальной компиляцией в настройках компилятора Scala. Но все равно это работает только когда вы нажимаете Compile (или Run или Debug или что-то подобное). Это не то, что идея делает в фоновом режиме.

2) Есть еще одна особенность IntelliJ Idea, которая также требует некоторой поэтапной перекомпиляции, и эта работает почти в реальном времени. Это функция подсветки синтаксиса, которая реализована в плагине Idea Scala и требует немедленной повторной обработки всех файлов, которые вы изменяете, аналогично, но теперь точно так же, как и настоящий компилятор. И на самом деле вы не должны вдаваться в детали этого процесса (если только вы не собираетесь разрабатывать плагин Scala). То, что обеспечивает этот процесс, является некоторой синтаксической структурой кода, но не фактической .class файлы.

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