web-dev-qa-db-ja.com

Java 9?

私のプロジェクトはNetty Epollトランスポートに依存しています。依存関係は次のとおりです。

<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-transport-native-epoll</artifactId>
    <version>${netty.version}</version>
    <classifier>${epoll.os}</classifier>
</dependency>

この依存関係の自動生成モジュール名は次のとおりです。

netty.transport.native.epoll

nativeキーワードはJava 9で予約されているため、このモジュールをプロジェクトの依存関係として追加することはできません。

module core {
    requires netty.transport.native.epoll;
}

のため:

module not found: netty.transport.<error>

さらに、jarツール--describe-moduleは次を報告します。

次のモジュール記述子を導出できません:netty-transport-native-epoll-4.1.17.Final-SNAPSHOT-linux-x86‌_64.jar netty.transport.native.epoll:無効なモジュール名: 'native'はJava識別子

回避策はありますか? (もちろん、「正しいnettyアーティファクトのリリース」を除く)。

[〜#〜] edit [〜#〜]

メンテナーのための簡単な修正として、次の行をビルドに追加できます:

<manifestEntries>
   <Automatic-Module-Name>netty.transport.epoll</Automatic-Module-Name>
</manifestEntries>
19

さて、これに対する解決策は次のようです:-

  • アーティファクトの名前を変更する自体 (すべての所有者が好むとは限らない)

    [〜#〜]または[〜#〜]

  • 同じ(別の)モジュール名で同じアーティファクト名を中断せずに使用できる別の方法は、META-INF/MANIFEST.MFをパッケージ化することです。 属性を持つアーティファクトのAutomatic-Module-Nameによって使用されるモジュールの名前を管理します自動モジュールとして変換された場合のモジュール記述子。

    [〜#〜]または[〜#〜]

  • アーティファクトの所有者は、module.info.Javaを使用してモジュール宣言をJARに追加できます。 (これにより、ボトムアップ移行が遅くなる可能性があります)


モジュール宣言 は仕様で次のように定義されているため:

モジュール宣言は、モジュール間の関係を表現するために他のモジュール宣言で使用できるモジュール名を導入します。 モジュール名は、1つ以上の Java識別子(§3.8) で構成され、「。」で区切られます。トークン


宣言 が意味するところ-

場合によっては、インターネットドメイン名が有効なパッケージ名ではない可能性があります。これらの状況に対処するための推奨される規則を次に示します。

  • ドメイン名にハイフン、または識別子(§3.8)で許可されていないその他の特殊文字が含まれている場合は、アンダースコアに変換します。

  • 結果のパッケージ名コンポーネントのいずれかがキーワード(§3.9)である場合、それらにアンダースコアを追加します。

  • 結果のパッケージ名コンポーネントのいずれかが数字または識別子の最初の文字として許可されていない他の文字で始まる場合、コンポーネントの前にアンダースコアを付けます。

ただし、 nderscoreはJava9のキーワードです

enter image description here

int _;  // is would throw an error on javac based out of JDK9
int _native; // works fine
10
Naman