JDK 10 ビルド パス移行後の Eclipse で XML クラスが見つからない: 解決策
Maven プロジェクトのビルド パスを JDK 10 に切り替えようとしたときEclipse 内では、Eclipse ビルド プロセスが次のような XML 関連クラスを見つけられないという問題が発生する可能性があります。 javax.xml.xpath.XPath、org.w3c.dom.Document、および org.xml.sax.SAXException。これらの問題は主に、xml-apis-1.4.01 依存関係から派生したクラスに影響します。
根本原因
この動作は、プロジェクトが Java 1.8 から Java に移行するときにトリガーされます。 module-info.java ファイルを使用してモジュールとして明示的に宣言されていない場合。これは、プロジェクトのコードが名前なしモジュールでコンパイルされることを意味します。このモジュールでは、これらの問題のあるパッケージをエクスポートする JRE システム ライブラリの java.xml など、名前付きモジュールと名前なしモジュールが完全に表示されます。
さらに、xml-クラスパス上の apis.java は、これらの同じパッケージの別のセットを提供します。ただし、これらのパッケージは名前のないモジュールに関連付けられているため、JLS §7.4.3 で定義されている「固有の可視性」要件の違反につながります。その結果、プログラムは無効になり、コンパイラから拒否されます。
解決策
この問題を解決するには、次の 3 つのアプローチのいずれかを採用できます。
(1) プロジェクトをモジュールとして宣言する
プロジェクト内に module-info.java ファイルを導入し、具体的なモジュールを定義します。プロジェクトが「requires」キーワードを使用して読み取る必要があるモジュール。このアプローチでは、どのパッケージがインポートされるかを明示的に示すことで、固有の可視性を確保します。
(2) 監視可能なモジュールを制限する
プロジェクトをモジュールに変換せずに、モジュールを除外することができます。監視可能なモジュールのセットからの java.xml。 Eclipse では、これは「コンテンツ」タブの「モジュール性の詳細」ダイアログで実行できます。 java.base 以外のほとんどのモジュールを「利用可能なモジュール」列にプッシュし、必須のものを選択的に再追加する必要がある場合があります。
(3) java.xml を除外する (JDK バグ)
このアプローチは、不正な状況でもコンパイルを通過できる javac のバグを利用するため、あまり推奨されません。 java.xml をビルド パスの最後に移動すると、名前のないモジュールから効果的に隠すことができます。ただし、これは予期しない動作を引き起こす可能性があり、信頼できる長期的な解決策ではありません。
結論として、Eclipse で JDK 10 に切り替えるときに発生する XML 関連のクラスが見つからない問題は、独自の可視性要件。この問題は、プロジェクトをモジュール化するか、監視可能なモジュールを制限することで解決されます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3