これまで、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のアノテーションモジュールをアップグレードできますが、ツールチェーン全体でこれを行うのは大変な作業のようです。
通常、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で削除されたため、今後のリリースでもそのまま動作し続けます。