Некорректное поведение процессора аннотаций

126
6
33
Итак, создаю я процессор аннотаций, однако почти сразу же появилась странность: я использую MCP, поэтому с нуля без процессора аннотаций всё собирается минуты за 3, однако если подключить мой полностью пустой процессор аннотации - компиляция растягивается на насколько десятков часов, причем если сперва скорость нормальная, то ближе к концу всё становится печально до уровня 1 класс в 10 минут. Каковы могут быть причины такого поведения?
 

tox1cozZ

aka Agravaine
8,455
598
2,892
10 часов? У тебя там миллион классов?
Да, процессор аннотаций увеличивает компиляцию, так как при его применении невозможна инкрементальная компиляция и все классы должны компилироваться снова.
 
126
6
33
Ну их вроде всего 5639 на выходе, но после каждого файла время его обработки увеличивается так, что через 20 минут после старта скопилировано 4119 файлов, а через 40 минут 4121 и так далее. Проц кстати всё это время в 95% сидит.
 

tox1cozZ

aka Agravaine
8,455
598
2,892
Может у тебя процессор аннотаций неправильно сделан как-то? Хз, у меня 1000 классов и повсеместно используется Lombok - собирается всё за максимум 30-40 секунд.

Возможно, поможет это: Incremental Compilation, the Java Library Plugin, and other performance features in Gradle 3.4
Раздел "Explicitly declaring the annotation processor classpath".
 
Последнее редактирование:
7,099
324
1,510
@NotYuki покажи процессор

так как при его применении невозможна инкрементальная компиляция и все классы должны компилироваться снова
Неправда. Процессоры аннотаций бывают разные. Например, в документации Gradle приводится такая классификация:
  • isolating - одна аннотация - одна пачка сгенерированных файлов
  • aggregating - множество аннотаций - одна пачка сгенерированных файлов
  • все остальное
Первый тип полностью поддерживает инкрементальную компиляцию. Второй частично.
 
Последнее редактирование:
126
6
33
Процессор загрузил, модуль процессора аннотаций вынесен как дочерний основного, в build.gradle основного модуля в зависимостях прописано annotationProcessor project(':TestProcessor'), в настойках проекта все пути импортировал градл и процессор аннотаций разрешен, однако лютое залагивание не происходит если билдить не через ран, а через таск градла.
 

Вложения

  • TestProcessor-1.0.0.jar
    3.4 KB · Просмотры: 1
7,099
324
1,510
7,099
324
1,510
Хотя, сорцы из mcp не скидывай, это по идее нарушает eula
Т.к. процессор ниче не делает, то можно любые сорцы закинуть для теста
 
808
3
124
Исходя из того как ты описываешь замедление, я бы поставил на то, что от включения аннотейшн процессора компилятору почему-то нужно ощутимо больше памяти, и через какое-то время он начинает задыхаться от сборки мусора. Попробуй выставить в настройках больше памяти.
 
Сверху