以前にコンパイルした他のモジュールに依存するモジュールをコンパイルするとき、--module-path <directory>
オプションを指定する必要があります。これにより、依存するモジュールが表示されます。
しかし同時に、いくつかの非モジュラーJarファイルも表示したいと思います。ただし、自動モジュールを作成せず、--class-path some.jar
の隣に--module-path <directory>
を指定するだけの場合、javacはclaspathを無視するようで、「パッケージyyyが見つかりません」とスローします。その他の「見つかりません」エラー。
--class-path
と--module-path
を同時に(コンパイル)使用することは違法であるが、javacはそれに対して警告しないことを理解できます。
--classpath
オプションと--module-path
オプションを同時に使用することは、違法ではない。クラスパスを明示的に指定しない場合でもdefaults現在のディレクトリに両方を同時に使用することができます。
javac -help
メッセージの詳細と javac tools docs -
--module-path <path>, -p <path>
アプリケーションモジュールの場所を指定する
--class-path <path>, -classpath <path>, -cp <path>
ユーザークラスファイルと注釈プロセッサの場所を指定する
--class-path
、-classpath
、または-cp
が指定されていない場合ユーザークラスパスは、現在のディレクトリです。
Edit:@MouseEventのおかげで、おそらく質問の一部を見逃していました
ただし、それらを自動モジュールにせず、--module-pathの隣に--class-path some.jarを指定するだけの場合、javacはclaspathを無視するようで、「package yyy not found」およびその他の「not found」をスローします「エラー。
それらを自動化しない場合、 モジュールシステムの名前のないモジュール および-として扱われます
実際、名前付きモジュールは、名前なしモジュールへの依存を宣言することさえできません。名前付きモジュールがクラスパスの任意のコンテンツに依存することを許可すると、信頼できる構成が不可能になるため、この制限は意図的なものです。
さらに、unnamedモジュールはすべてのパッケージをエクスポートするため、automaticモジュールは、クラスパスからロードされたすべてのパブリックタイプにアクセスできます。
ただし、クラスパスの型を使用する自動モジュールは、明示的なモジュールが名前のないモジュールへの依存関係を宣言できないため、それらの型をそれに依存する明示的なモジュールに公開する必要はありません。
明示的モジュール
com.foo.app
のコードがcom.foo.bar
のパブリックタイプを参照し、たとえば、そのタイプのシグネチャがまだ存在するJARファイルのいずれかのタイプを参照する場合クラスパス、com.foo.app
のコードは、com.foo.app
が名前のないモジュールに依存できないため、そのタイプにアクセスできません。
これは、com.foo.app
を一時的に自動モジュールとして処理して、クラスパス上の関連JARファイルが自動モジュールとして処理されるか、または明示的なモジュール。