2017-07-28 6 views

答えて

2

モジュール情報を定義しないと、IDEAはアプリケーションとクラスパスへの依存関係を設定します。あなたはモジュール情報を持っているので明示的なモジュールなので、モジュールパス上になければなりません。通常、あなたは現在、自動モジュールとして依存関係を処理します。

しかし、あなたの依存関係は少なくともクラスパス上にあることが必要です。ここで議論したWhy Java 9 does not simply turn all JARs on the class path into automatic modules?

たとえば、mymoduleは自動モジュールに依存しますが、自動モジュールにはまだできないjarが必要です。コマンドライン上では次のようになります:

java -cp legacy.jar -p "mymodule.jar; automodule.jar;" -m mymodule/com.example.mymodule.Application

IMO intellijは現在これをサポートしていません。クラスパス上でアプリケーション全体を少なくとも実行するための回避策として、モデル情報の名前を変更して、ジグソーモジュールにしないようにすることができます。

+2

私は彼がクラスパスからプロジェクト全体を実行することを好むということを理解しました。どうして?誰が知っているか、多分互換性をテストする。自動モジュールに変換できない(例えば、パッケージを分割するなど)依存関係の問題を回避することができます。 – Nicolai

+0

真実、私は自分の答えを編集しました – Daniel

+0

質問には答えられないと思います。私が見る限り、IntelliJはJDK9を使用する場合、モジュールパスの代わりにクラスパスを使用するオプションを提供していません。これを行う理由は?実質的にJavaエコシステム全体はモジュールと互換性がありません。すべての主要なオープンソースプロジェクトには分割されたパッケージ、無効なモジュール名(例えばnetty、cassandraなどのネイティブの単語が入ったjarファイル)があります。モジュールを使って作業することは、誰も戦おうとしていない険しい戦いです。 –

関連する問題