При добавлении mapstruct в Kotlin проект начал замечать, что классы стали пропадать будто бы. То есть вносятся изменения, запускаешь проект, а какого-то класса недостаточно. Я начал думать на kapt, но после долгих разбирательств удалось воспроизвести проблему без сторонних плагинов, достаточно в проект добавить java класс.
Способ воспроизведения:
- Запускаем проект
- Меняем что-то в в сущности Test (достаточно поставить перенос строки)
- Перезапускаем проект
- Получаем NoClassDefFoundError: com/company/subproject/entity/Test$JmixEntityEntry
При этом при еще одном перезапуске проекта ошибка устраняется
Данная проблема касается не только сущностей. Просто на сущности стабильно воспроизводится.
demo.zip (1.6 МБ)
Получается, что проблема с исчезновением классов до сих пор осталась
Я уточню, что падение с ошибкой происходит в райнтайме. И после перезапуска приложения ошибка продает. Возможно NoClassDefFoundError и тайное исчезновение классов имеют разные причины.
Об исчезновении классов в райнтайме упоминалось еще в Совмещение Kotlin и Java в одном проекте - #2 от пользователя yarik1706
Изменение sourceSets не помогает. Главный класс и так на kotlin.
Помогает полный clean проекта (вместе с подмодулями), но решение проблемы спорное
Если последить за собранными файлами (.class), то заметно, что собранные kotlin файлы пропадают в момент компиляции java. Я точно не знаю в чем именно проблема, но помог флаг kotlin.incremental=false
Это решило проблему с NoClassDefFoundError и в целом исчезновения классов