После обновления до JDK 21 в моем проекте Spring Boot возникла следующая ошибка компиляции:
Fatal error compiling: java.lang.NoSuchFieldError:
Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field 'com.sun.tools.javac.tree.JCTree qualid'




Виновник - Ломбок. Минимальная версия Lombok, совместимая с JDK 21, — 1.18.30.
Это означает, что минимальная версия Spring Boot — 3.1.4, если только вы не хотите вмешиваться в автоконфигурацию Spring Boot и устанавливать версию Lombok в своем проекте отлично от версии Spring Boot по умолчанию.
См.: https://github.com/projectlombok/lombok/issues/3393
@M.Deinum Технически вы правы, однако я предпочитаю не вмешиваться в автоматически настроенные версии зависимостей в Spring Boot, если только нет действительно очень веской причины. Это часто приводит к еще большему беспорядку где-то неожиданно. И всегда кто-то забывает это в файле maven pom, и это вызывает проблемы позже.
С чем я могу только согласиться, но это не единственный вариант. Кроме того, lombok — это немного другой зверь, для которого иногда нужны другие версии (хотя я бы предпочел, чтобы эта конкретная библиотека вообще не использовалась, но это личное предпочтение).
@M.Deinum Я обновил свой ответ соответственно :)
Следуя первому ответу отсюда, я внес следующие изменения: ранее по умолчанию использовалась версия lombok 1.18.20, и мне нужно передать последние, которые решают проблему для меня, когда я перешел с весенней загрузки 2.XX на 3.3.3
Когда вы выполняете зависимость mvn:tree, вы можете увидеть, откуда берется более низкая версия, и если вы хотите исключить ее и новую или просто добавить новую и проверить еще раз, она все равно вытягивает старую версию, если не просто добавить новую, например ниже.
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
<scope>provided</scope>
</dependency>
Это обходной путь — обычно лучше не связываться с автоматически настроенными версиями Spring Boot. Зачастую это приносит больше вреда, чем пользы.
@HonzaZidek - но сейчас я не могу найти здесь другого варианта, на это уходит почти день.
@HonzaZidek, нам не нужно его исключать, изначально это не работало, я не знаю почему, но когда я очистил локальный репозиторий и попробовал, все выглядело нормально
Нет, это не означает, что минимальная версия загрузки — 3.1.4, вы можете вручную обновить Lombok, если хотите (я только что скомпилировал версию Spring Boot 2.7.x с более новой версией Lombok). Но если вам нужна определенная версия Java21 для всего спектра (поскольку она проверена на Java21), тогда действительно подойдет версия 3.1.4.