Jdbi: JDBI3 версии 3.19.0 не работает на JDK <11

Созданный на 12 апр. 2021  ·  7Комментарии  ·  Источник: jdbi/jdbi

Согласно примечаниям к выпуску , я ожидал, что эта версия будет работать с JDK 8 и далее, но я получаю следующую ошибку:

java.lang.UnsupportedClassVersionError: com/github/benmanes/caffeine/cache/Caffeine has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 53.0

Версия класса 55.0 - это JDK 11, поэтому он не будет работать с JDK 8 и далее.
Это выяснилось в следующем запросе на слияние: https://github.com/talsma-ict/enumerables/pull/242

question

Самый полезный комментарий

извините за это: у кофеина нет версии, которая работает как на jdk8, так и на jdk16

Просто к сведению, проблема совместимости в 2.x - только для тех, кто хочет отключить sun.misc.Unsafe . Это по-прежнему разрешено в JDK16 по умолчанию, но может быть ограничено через jlink. Unsafe больше не требовалось в Caffeine 3.0 (через резервные варианты) и полностью удалено в Master (грядущая версия 3.0.2). Ужесточение ограничений доступа в JDK16 не повлияло на нас, но JDK8 не поставлялся с VarHandles, поэтому мы застряли на использовании Unsafe (или при переходе на AtomicReferenceFieldUpdater который имеет проблемы с производительностью из-за использования отражения при доступе к полю) .

Все 7 Комментарий

Привет, @sjoerdtalsma , извините за это: у кофеина нет версии, которая работает как на jdk8, так и на jdk16. Поскольку 16 теперь является GA, Jdbi обновился до совместимой версии Caffeine. В примечаниях к выпуску упоминается:

обновите caffeine dep до 3.0.1 для jdk16 (ПРИМЕЧАНИЕ: пользователям jdk8 потребуется вернуть его до 2.x)

но я согласен, это не очень заметно.

Я также добавил сюда примечание: http://jdbi.org/#_java_compatibility

Есть ли способ лучше сообщить об этом пользователям? Надеюсь, как только вы вернетесь к версии с кофеином до 2.x, все заработает, но, пожалуйста, дайте нам знать, если возникнут дальнейшие проблемы.

Я внес несколько обновлений в примечания к выпуску, чтобы сделать это более заметным. Сообщите нам, есть ли еще что-нибудь, что мы можем сделать лучше здесь.

Спасибо, я надеюсь, что другие читают немного внимательнее, чем я.
На самом деле это не проблема для меня, но пользователи моей библиотеки должны быть осторожны, так как для них это транзитивная зависимость от транзитивной зависимости 😉.

Я решил не снижать уровень кофеина, а придерживаться стандартной версии и просто использовать более новую версию JDK, при этом сохраняя артефакт байт-кода JDK8. Таким образом, я предоставляю им самим решать.

Спасибо за внимание, сейчас закрою этот вопрос.

Да, очень жаль, что это доводят до конечных пользователей. Но если им нужен отличный опыт разработки, пора обновить Java, запускать на 8 будет становиться все труднее и труднее;)

Представьте, что вы пытаетесь сохранить совместимость байт-кода JDK 1.5 при добавлении метаданных головоломки module-info.java для вашей библиотеки 😉
Я стараюсь ограничить требования наименьшим общим знаменателем.

извините за это: у кофеина нет версии, которая работает как на jdk8, так и на jdk16

Просто к сведению, проблема совместимости в 2.x - только для тех, кто хочет отключить sun.misc.Unsafe . Это по-прежнему разрешено в JDK16 по умолчанию, но может быть ограничено через jlink. Unsafe больше не требовалось в Caffeine 3.0 (через резервные варианты) и полностью удалено в Master (грядущая версия 3.0.2). Ужесточение ограничений доступа в JDK16 не повлияло на нас, но JDK8 не поставлялся с VarHandles, поэтому мы застряли на использовании Unsafe (или при переходе на AtomicReferenceFieldUpdater который имеет проблемы с производительностью из-за использования отражения при доступе к полю) .

привет @ ben-manes, спасибо за дополнительный контекст. Это правда, что jdk16 позволяет вам по-прежнему использовать Unsafe, но я не думаю, что это разрешено по умолчанию - по крайней мере, в нашем случае нам пришлось передать --illegal-access=permit поскольку по умолчанию теперь запрещено. Я не хотел, чтобы "из коробки" для нового проекта jdk16 с Jdbi требовал такой уродливый переключатель, поэтому и был обновлен до 3.x.

Спасибо за обновление, чтобы больше не использовать Unsafe, мы рады, что он исчез :)

Была ли эта страница полезной?
0 / 5 - 0 рейтинги