私は私のプロジェクトの一つであるIntelliJでJavaの10を使用しようと警告出くわしています。
私が、クラスのサーバーをエクスポートするわけではないと言っています。あなたは私のパッケージ構造が表示された場合、私は、サーバー内部に持っているnetwork
。このようなパッケージ私のモジュール-infoファイルのルックスを
module core {
requires com.google.guice;
requires io.netty.all;
requires config;
requires org.apache.logging.log4j;
exports com.money.heist.server.core;
opens com.money.heist.server.core.network to com.google.guice;
}
私はそれを行うにはしたくないが、私は親パッケージ内のネットワーク・パッケージ内のクラスを使用したいと私は意図的にパッケージネットワークを輸出しておりません。
ここではそのいずれかの良い/悪い習慣であるか、それだけのIntelliJが狂っていますか?
あなたは警告メッセージを拡大する場合は、その背後にある理由を見つけるだろう
それに加えて、Javaの9のモジュールは、そのパッケージをエクスポートしないことによって、そのクラスの一部を隠すことがあります。
非エクスポートパッケージからエクスポートしたパッケージ参照クラスで、クラスの公開API場合は、そのようなAPIは、モジュールの便利な外ではありません。
そのようなAPIが有用ではない理由は、他のモジュールが/アクセスインスタンス化することはできないということであるServer
クラスを。
注目すべき、あなたのモジュールの記述子に、あなたは含めました
opens com.money.heist.server.core.network to com.google.guice;
そのアクセスを提供するコンパイル時実行時ではなくに、(IntelliJのは、それを感知しない理由は、おそらく理由)public
とprotected
、パッケージ内の型、およびpublic
およびprotected
それらが開かれているモジュールにこれらのタイプのメンバー。
あなたが変更した場合は、上記に関連することopens
にディレクティブをexports
、あなたはさらにIntelliJのからの警告は表示されません。