#java #lombok #gradle-plugin #byte-buddy
Вопрос:
Моя цель состоит в том, чтобы добавить некоторые аннотации Ломбока (например @AllArgsConstructor
, @NoArgsConstructor
и т. Д.) В класс во время сборки Gradle, Чтобы аннотации распознавались процессором аннотаций Ломбока и заставляли его генерировать код для соответствующих аннотаций.
Использование ByteBuddy и плагина ByteBuddy Gradle хорошо работает для добавления аннотаций RetentionPolicy.RUNTIME
; но добавление аннотаций Lombok с помощью того же механизма не приводит к сгенерированному коду, предположительно, потому byteBuddy
, что задача Gradle выполняется после compileJava
задачи, и поэтому Lombok уже завершил генерацию кода к моменту добавления аннотаций ByteBuddy.
Есть ли способ заставить ByteBuddy работать до Ломбока в цикле сборки Gradle? Является ли ByteBuddy неправильным инструментом для этой работы? Есть ли другой способ вставить аннотации Ломбока в исходные файлы во время сборки?
Комментарии:
1. Это неправильный инструмент. ByteBuddy и соответствующий плагин gradle используют скомпилированный байтовый код для внесения изменений, в то время как lombok нуждается в AST, который существует только во время компиляции. Я не знаю решения. Наверное, это сложно. Ломбок не очень хорошо взаимодействует с другими процессорами аннотаций, поэтому использование точки доступа также может быть проблематичным.
2. Как говорит @JanRieke, вам понадобится инструмент преобразования исходного кода, которых немного. Byte Buddy работает на уровне байтового кода и не может добавлять аннотации, которые видны преобразователям исходного кода, если вы не декомпилируете преобразованный байтовый код, что для меня звучит как неправильный подход.