Java 9 のモジュール依存関係の問題: 「自動生成されたモジュール名のモジュール記述子を導出できません」
モジュール記述子を導出できないJava 9 の自動生成モジュール名の場合は、生成されたモジュール名に予約キーワードが含まれるライブラリへの依存関係を宣言するときに発生します。これは、「ネイティブ」キーワードを含むモジュール名を生成する Netty の Epoll トランスポートの場合に当てはまります。
Java 9 ではモジュールの概念が導入されており、明示的なモジュール宣言が必要です。ただし、自動生成されたモジュール名は予約されたキーワードを含む規則に従っており、依存関係を明示的に宣言するときに競合が発生します。
解決策:
この問題を解決するには、次の 2 つの方法があります。主なアプローチが利用可能です:
1. Automatic-Module-Name を使用したパッケージ化:
ライブラリは、Automatic-Module-Name 属性を指定する META-INF/MANIFEST.MF ファイルを使用してアーティファクトをパッケージ化できます。この属性を使用すると、ライブラリは生成されたモジュール名とは異なるモジュール名を定義できるため、キーワードの競合を回避できます。
2.ライブラリ所有者による JAR へのモジュール宣言の追加:
ライブラリ所有者は、 module-info.java ファイルを使用して、必要なモジュール宣言を JAR ファイルに追加できます。これにより、明示的なモジュールの依存関係が宣言され、Java 9 のモジュール システムとの互換性が確保されます。
説明:
Java のモジュール宣言構文では、モジュール名が有効な Java 識別子で構成される必要があると指定されています。 「native」などの予約キーワードは識別子として許可されていないため、「無効なモジュール名: 'native' は Java 識別子ではありません。」というエラー メッセージが表示されます。
これに対処するには、Java モジュール システム仕様が必要です。ハイフンやその他の特殊文字をアンダースコアに変換し、必要に応じて特定の文字やキーワードの前にアンダースコアを付けることを提案します。ただし、アンダースコアは Java 9 ではキーワードにもなったため、プレフィックスとしてのアンダースコアの使用は慎重に行う必要があることに注意することが重要です。
以上がJava 9 の「自動生成されたモジュール名のモジュール記述子を導出できません」エラーを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。