NoClassDefFoundError

При добавлении mapstruct в Kotlin проект начал замечать, что классы стали пропадать будто бы. То есть вносятся изменения, запускаешь проект, а какого-то класса недостаточно. Я начал думать на kapt, но после долгих разбирательств удалось воспроизвести проблему без сторонних плагинов, достаточно в проект добавить java класс.

Способ воспроизведения:

  1. Запускаем проект
  2. Меняем что-то в в сущности Test (достаточно поставить перенос строки)
  3. Перезапускаем проект
  4. Получаем NoClassDefFoundError: com/company/subproject/entity/Test$JmixEntityEntry

При этом при еще одном перезапуске проекта ошибка устраняется

Данная проблема касается не только сущностей. Просто на сущности стабильно воспроизводится.

demo.zip (1.6 МБ)

1 симпатия

Получается, что проблема с исчезновением классов до сих пор осталась

Я уточню, что падение с ошибкой происходит в райнтайме. И после перезапуска приложения ошибка продает. Возможно NoClassDefFoundError и тайное исчезновение классов имеют разные причины.

Об исчезновении классов в райнтайме упоминалось еще в Совмещение Kotlin и Java в одном проекте - #2 от пользователя yarik1706

Изменение sourceSets не помогает. Главный класс и так на kotlin.
Помогает полный clean проекта (вместе с подмодулями), но решение проблемы спорное

Если последить за собранными файлами (.class), то заметно, что собранные kotlin файлы пропадают в момент компиляции java. Я точно не знаю в чем именно проблема, но помог флаг kotlin.incremental=false

Это решило проблему с NoClassDefFoundError и в целом исчезновения классов