根据发行说明,我希望此版本可以在 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 :
嗨@sjoerdtalsma ,对不起,这有点你:咖啡因没有任何版本可以在 jdk8 和 jdk16 上运行。 由于 16 现在是 GA,Jdbi 升级到兼容的 Caffeine 版本。 发行说明确实提到:
将 jdk16 的 caffeine dep 升级到 3.0.1(注意:jdk8 用户需要将其管理回 2.x)
但我同意它不是很突出。
我还在这里添加了一个注释: http :
有什么方法可以更好地向用户发出信号? 希望一旦您将咖啡因版本管理回 2.x,它就可以正常工作,但如果还有其他问题,请告诉我们。
我对发行说明进行了一些更新,以更加突出地说明这一点。 如果还有什么我们可以在这里做得更好,请告诉我们。
谢谢,我希望其他人比我更仔细地阅读。
这对我来说并不是真正的问题,但是我的库的用户必须小心一些事情,因为这对他们来说是传递依赖的传递依赖😉。
我决定不降级咖啡因,而是坚持使用标准版本,只使用更新的 JDK 构建,同时仍然提供 JDK8 字节码工件。 这样我就让他们自己决定。
感谢您的额外强调,我现在将关闭此问题。
是的,这真的很不幸被推送给最终用户。 但是如果他们想要一个优秀的开发体验,现在是升级Java的时候了,它只会越来越难在8上运行;)
想象一下,在为你的库添加拼图module-info.java
元数据的同时,试图保持 JDK 1.5 字节码的兼容性😉
我尽量将要求限制在最小公分母上。
抱歉这一点:caffeine 没有可以在 jdk8 和 jdk16 上运行的任何版本
仅供参考,2.x 中的兼容性问题仅适用于那些想要禁用sun.misc.Unsafe
。 默认情况下,这在 JDK16 中仍然是允许的,但可以通过 jlink 进行限制。 在 Caffeine 3.0 中不再需要 Unsafe(通过回退),并在 master 上完全删除(即将到来的 3.0.2)。 JDK16 中访问限制的收紧对我们没有影响,但是 JDK8 没有附带 VarHandles,所以我们一直在使用 Unsafe(或者迁移到AtomicReferenceFieldUpdater
,因为在访问字段时使用反射会导致性能问题) .
嗨@ben-manes,感谢这里的额外背景。 jdk16 确实允许您仍然使用 Unsafe,但我认为默认情况下不允许它 - 至少在我们的情况下,我们必须传递--illegal-access=permit
因为默认值现在是拒绝。 我不希望带有 Jdbi 的新 jdk16 项目的“开箱即用体验”需要这样一个丑陋的开关,因此升级到 3.x。
感谢您更新不再使用 Unsafe,我们很高兴看到它消失了:)
最有用的评论
仅供参考,2.x 中的兼容性问题仅适用于那些想要禁用
sun.misc.Unsafe
。 默认情况下,这在 JDK16 中仍然是允许的,但可以通过 jlink 进行限制。 在 Caffeine 3.0 中不再需要 Unsafe(通过回退),并在 master 上完全删除(即将到来的 3.0.2)。 JDK16 中访问限制的收紧对我们没有影响,但是 JDK8 没有附带 VarHandles,所以我们一直在使用 Unsafe(或者迁移到AtomicReferenceFieldUpdater
,因为在访问字段时使用反射会导致性能问题) .