2017-05-22 10 views
11

これはjava.rmiモジュールのモジュール宣言です:だからプラットフォームモジュール間でサイクルが許可されていますか?

module java.rmi { 
    requires java.base; 
    requires java.logging; 

    exports java.rmi.activation; 
    exports com.sun.rmi.rmid to java.base; // <-- cycle 
    ... 
} 

java.rmijava.base間の循環依存が右、ありますか?サイクルはplatform modulesの間にできますか?

+0

@Eugene 'com.sun.rmi'は' java.rmi'モジュールによってエクスポートされるパッケージです – ZhekaKozlov

+0

@Eugent 'java.rmi'は' java.base'に依存します。しかし、パッケージを 'java.base'にもエクスポートするので、' java.base'は明らかにこのパッケージにアクセスする必要があります(そうでなければ、そのコード行は意味をなさない)。 – ZhekaKozlov

答えて

10

モジュールシステムは、requires句で静的に宣言するサイクルを禁止します。これはプラットフォームとアプリケーションのモジュールに当てはまります。あなたが与えた例はそのルールに違反していません。

必須節は、モジュールグラフの可読性エッジのソースの1つに過ぎません。他のものはコマンドラインフラグ、反射、requires transitiveですが、私はもっとあると確信しています。これらをすべて追加すると、モジュールグラフにサイクルが発生する可能性があり、これは禁止されていません。

あなたの具体的な例では、サイクルは一度だけjava.baseはそれがcom.sun.rmi.rmidにクラスのリフレクションを使用している場合に発生する可能性がjava.rmiでを、読み取っ作成されます。

関連する問題