web-dev-qa-db-ja.com

Java 9からcom.Sun.tools.javac.utilにアクセスする

com.Sun.tools.javac.utilからListクラスにアクセスしようとしています。これはJava 8で正常に機能しますが、Java 9に切り替えると次のエラーが発生します:Package 'com.Sun.tools.javac.util' is declared in module "jdk.compiler", which does not export it to the unnamed module"

requires jdk.compiler;module-infoファイルに追加してみましたが、問題は解決しませんでした。

10
bramhaag

長期的には、このような状況に対処する安全な方法は、JDKのこれらの内部APIの使用をやめることです。

jdk.compilerモジュールのAPIをの代わりとして使用できます com.Sun.tools.javacパッケージ。

system Java compiler の実装と同等のコマンドライン、javac、およびjavah

特にcom.Sun.tools.javac.util.Listの場合、そのオーバーライドされていない自己定義メソッドのほとんどすべてが、インターフェイスJava.util.List


移行ガイドに関する列の削除Java.* AP​​Isは次のように述べています-

Javaチームは下位互換性に取り組んでいます。アプリケーションがJDK 8で実行されている場合、サポートされている外部使用を目的としたAPIを使用している限り、JDK 9で実行されます。

これらには以下が含まれます:

  • JCP標準、Java.*javax.*
  • JDK固有のAPI、一部com.Sun.*、一部jdk.*

サポートされているAPIはJDKから削除できますが、予告なしに削除できます。コードが静的分析ツールjdeprscanを実行して非推奨のAPIを使用する。

次に、上記の強調表示されたリスクに追加します。

コンパイル時間

JDK 9にカプセル化されている内部APIはコンパイル時にはアクセスできませんが、--add-exportsコマンドラインオプションを使用してコンパイル時にアクセスできるようにすることができます。

あなたの場合:

--add-exports jdk.compiler/com.Sun.tools.javac.util=ALL-UNNAMED

実行時間

ランタイムでは、JDK 8にあった場合でも引き続きアクセス可能ですが、将来のリリースではアクセスできなくなります。この時点で、--add-exportsまたは--add-opensオプションを使用して、実行時にアクセス可能にすることができます。上手。

9
Naman