web-dev-qa-db-ja.com

Java 9のJSR-305アノテーション置換

これまで、Findbugs JSR-305アノテーション(com.google.code.findbugs:jsr305)を使用しており、ツールサポート(Sonar、Eclipse、Findbugsなど)を含むすべてが正常に機能しています。

ただし、Java 9のジグソーパズルはJSR-305アノテーションを壊すと理解しています(2つのモジュールに1つのパッケージは許可されていません)。これはJavaOne2015で確認されました。Oracleの理由は、JSR-305は発生したことがなく、JSR-250はこれらの注釈を承認する必要があるというものです。

Java8とJava9の両方で機能するJSR-305アノテーションの代替品を探しています。履歴がガイドである場合はJava 9 GAおよびJava 8 EOLはかなり短くなるため、コードの非互換性を事前に修正したいと思います。理論的には、JDKのアノテーションモジュールをアップグレードできますが、ツールチェーン全体でこれを行うのは大変な作業のようです。

27

通常、2つのモジュールが同じパッケージ内の型を定義できないのは事実です。最近まで、JDK 9ビルドのクラスパスにjsr305.jarを配置しても効果はありませんでした。そのJARファイルはjavax.annotationパッケージのタイプを定義しますが、そのパッケージはプラットフォームの組み込みJava.annotations.commonモジュールで定義され、後者が優先されます。

ただし、jsr305.jarが広く使用されていることと、既存のアプリケーションサーバーをJDK 9に簡単に移行できるようにするために、ルートモジュールのデフォルトセットを変更して、特にアノテーションモジュールを除外しました。 JDK 9クラスパスにjsr305.jarを配置すると、JDK9とJDK10の両方ですぐに機能します。詳細は JEP 261 にあります。アノテーションモジュールは、他のすべてのJava EEおよびCORBAモジュールとともに、 JEP 32 に従ってJDK 11で削除されたため、今後のリリースでもそのまま動作し続けます。

32
Mark Reinhold