Jdbi: JDBI3バージョン3.19.0はJDK <11では動作しません

作成日 2021年04月12日  ·  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はJDK11であるため、これはJDK8以降では機能しません。
これは、次のマージリクエストで明らかになりました: https

question

最も参考になるコメント

申し訳ありませんが、カフェインにはjdk8とjdk16の両方で実行されるバージョンがありません。

ちなみに、2.xの互換性の問題は、 sun.misc.Unsafeを無効にしたい人だけが対象です。 これはJDK16でもデフォルトで許可されていますが、jlinkを介して制限できます。 UnsafeはCaffeine3.0では(フォールバックを介して)不要になり、マスターでは完全に削除されました(今後の3.0.2)。 JDK16でのアクセス制限の厳格化は私たちに影響を与えませんでしたが、JDK8はVarHandlesに同梱されていなかったため、Unsafeの使用(またはフィールドへのアクセス時にリフレクションを使用するためにパフォーマンスの問題があるAtomicReferenceFieldUpdaterへの移行)でスタックしました。 。

全てのコメント7件

こんにちは@sjoerdtalsma 、申し訳ありませんが、このビットをあなたに申し訳ありません:カフェインにはjdk8とjdk16の両方で実行されるバージョンがありません。 16は現在GAであるため、Jdbiは互換性のあるバージョンのCaffeineにアップグレードしました。 リリースノートには次のように記載されています。

jdk16のカフェインdepを3.0.1にアップグレードします(注:jdk8ユーザーはそれを2.xに戻す必要があります)

しかし、私はそれがあまり目立たないことに同意します。

ここにもメモを追加しました: http

これをユーザーにもっとよく伝える方法はありますか? カフェインバージョンを2.xに戻して管理すれば、すべて正常に機能することを願っていますが、さらに問題が発生した場合はお知らせください。

これをもっと目立つように呼び出すために、リリースノートにいくつかの更新を加えました。 ここでもっとうまくできることが他にあるかどうか教えてください。

おかげで、他の人が私よりも少し注意深く読んでくれることを願っています。
これは私にとって実際には問題ではありませんが、ライブラリのユーザーが注意しなければならないことであり、これは推移的な依存関係の推移的な依存関係です😉。

私はカフェインをダウングレードしないことに決めましたが、標準バージョンに固執し、JDK8バイトコードアーティファクトを提供しながら、より新しいJDKでビルドするだけです。 そうすれば、私は彼らに自分で決めることを任せます。

特別に強調していただきありがとうございます。この問題は今すぐ終了します。

ええ、これがエンドユーザーにプッシュされるのは本当に残念です。 しかし、優れた開発エクスペリエンスが必要な場合は、Javaをアップグレードする時期が近づいています。これからも、8での実行はますます難しくなります;)

ライブラリにジグソーmodule-info.javaメタデータを追加しながら、JDK1.5バイトコードの互換性を維持しようとしていると想像してみてください😉
要件を最小公分母に制限するようにしています。

申し訳ありませんが、カフェインにはjdk8とjdk16の両方で実行されるバージョンがありません。

ちなみに、2.xの互換性の問題は、 sun.misc.Unsafeを無効にしたい人だけが対象です。 これはJDK16でもデフォルトで許可されていますが、jlinkを介して制限できます。 UnsafeはCaffeine3.0では(フォールバックを介して)不要になり、マスターでは完全に削除されました(今後の3.0.2)。 JDK16でのアクセス制限の厳格化は私たちに影響を与えませんでしたが、JDK8はVarHandlesに同梱されていなかったため、Unsafeの使用(またはフィールドへのアクセス時にリフレクションを使用するためにパフォーマンスの問題があるAtomicReferenceFieldUpdaterへの移行)でスタックしました。 。

こんにちは@ ben-manes、ここに追加のコンテキストをありがとう。 jdk16で引き続きUnsafeを使用できるのは事実ですが、デフォルトでは許可されていないと思います。少なくとも、デフォルトでは拒否されているため、少なくとも--illegal-access=permitを渡す必要がありました。 Jdbiを使用した新しいjdk16プロジェクトの「すぐに使えるエクスペリエンス」で、そのような醜いスイッチが必要になることを望まなかったため、3.xにアップグレードしました。

Unsafeを使用しないように更新していただきありがとうございます。これがなくなったことをうれしく思います:)

このページは役に立ちましたか?
0 / 5 - 0 評価

関連する問題

buremba picture buremba  ·  5コメント

Shujito picture Shujito  ·  5コメント

qualidafial picture qualidafial  ·  3コメント

goxr3plus picture goxr3plus  ·  4コメント

bakstad picture bakstad  ·  5コメント