私は、モジュール作成したcom.company.ep
ソースフォルダにありますcom.company.ep
。(はい、私は削除しているsrc
ビルド・パスから、それを削除!)ソースフォルダ内に、私は以下のようにパッケージのカップルを持っています:
com.company.ep <--- root source folder
com.company.ep.main <--- package 1
com.company.ep.model <--- package 2
com.company.ep.view <--- package 3
// ... more packages
module-info.java
メインクラスは、パッケージ内に位置していますcom.company.ep.main.Main
。私にはmodule-info.java
、私は、依存関係を設定しています:
module com.company.ep {
exports com.company.ep.main;
exports com.company.ep.model;
exports com.company.ep.view;
// ... more exports
requires javafx.controls;
requires javafx.graphics;
}
私は私のプログラムを起動しようとすると、Eclipseはことを私に言いました:
Error occurred during initialization of boot layer
java.lang.module.FindException: Module javafx.controls not found, required by com.company.ep
だから、私はコマンドプロンプト上でそれを実行しようとしました。
java -p d:\Applications\openjfx-sdk-11\lib;bin -m com.company.ep/com.company.ep.main.Main
bin
日食の出力フォルダがあり、それが働きました。
だから、私はに行ってきましたProperties → Run/Debug Settings → Main → Show Command Line
、それは示しました:
D:\Applications\openjdk-11.0.1\bin\javaw.exe -Dfile.encoding=UTF-8 -p "D:\Development\Eclipse-Workspace\MyProject\bin" -classpath "D:\Applications\openjfx-sdk-11\lib\javafx.base.jar;D:\Applications\openjfx-sdk-11\lib\javafx.controls.jar;D:\Applications\openjfx-sdk-11\lib\javafx.fxml.jar;D:\Applications\openjfx-sdk-11\lib\javafx.graphics.jar;D:\Applications\openjfx-sdk-11\lib\javafx.media.jar;D:\Applications\openjfx-sdk-11\lib\javafx.swing.jar;D:\Applications\openjfx-sdk-11\lib\javafx.web.jar;D:\Applications\openjfx-sdk-11\lib\javafx-swt.jar" -m com.company.ep/com.company.ep.main.Main
私が追加されたすべてのJARを持つユーザライブラリを作成している、とライブラリがプロジェクトのに追加されるのModulePath。
それから私は明示的にモジュールパスを設定しようとしているVM arguments
中Run/Debug Settings
:-p D:\Applications\openjfx-sdk-11\lib
、私はまだ運をいただきたいん。
私の質問は以下のとおりです。
- なぜ
javaw.exe
? - なぜ
classpath
?マイライブラリには、モジュールパスエントリとして追加されます。 - Eclipseでモジュールの依存関係を設定する方法。
私はオラクルのJava SEがインストールされている別のコンピュータ上で働いていたとき、それが働いたとして、それはおそらく、OpenJDKの問題であるかどうかを正しく日食を構成し、またはしている場合、私はわかりません。
ありがとうございました!
Eclipseは、あなたのモジュラープロジェクトを実行しているに失敗した理由の説明はで見つけることができますEclipse用OpenJFXドキュメント(IDEセクションからモジュラー)。
それは、すでに述べたように:
モジュラープロジェクトなので、私たちはすでにモジュールパスにJavaFXのSDKライブラリを追加しているので、任意のVM引数を追加する必要はありません。
しかし、あなたは、Eclipse上で実行する場合は、言及したエラーが発生します。
モジュールjavafx.graphicsが見つからない、hellofxで必要とされる:エラーは、ブート層java.lang.module.FindExceptionの初期化中に発生しました
では、なぜそれが失敗しています?
ドキュメントで説明しました:
EclipseのAntタスクは、モジュールのパスを上書きしますので、この例外が発生します
これはどのように起こるのでしょ??
コマンドラインは、(適用チェックShow Command Line
...実行構成から)、あなたは理由を見つけることができます。
$JAVA_HOME/bin/java -Dfile.encoding=UTF-8 \
-p bin/hellofx \
-classpath $PATH_TO_FX \
-m hellofx/org.openjfx.MainApp
あなたはそれをコピーして貼り付けると、端末でそれを実行した場合は、同じメッセージで、もちろん失敗します。その理由は、EclipseはモジュールパスにJavaFXのライブラリを追加していないということです。
タスクが間違った引数を生成する場合、のは、実行コンフィギュレーションを編集...そして追加することによって、私たち自身のVM引数を追加することによって、それを修正してみましょう-p $PATH_TO_FX:bin/hellofx
。
あなたはそれを実行した場合でも、それが再び失敗します。
レッツ・チェック、なぜ、とShow Command Line
実行構成から...
$JAVA_HOME/bin/java -Dfile.encoding=UTF-8 \
-p $PATH_TO_FX:bin/hellofx \
-p bin/hellofx \
-classpath $PATH_TO_FX \
-m hellofx/org.openjfx.MainApp
あなたが見ることができるように、ユーザーのVM引数が追加されます前に、デフォルトのantタスクの引数なので、そこの2つです-p
(--module-path
)のオプションは、最初1(JavaFXの瓶を持つユーザーの1)は二番目の(唯一のプロジェクトのモジュールで上書きされます)、そう、再び、JavaFXの瓶は、モジュールパスに追加されていない、ので、エラーが発生します。
だから、どのように我々はそれを修正できますか?
リンク文書で述べたように、可能な修正は次のとおりです。
ファイル名を指定して実行でこの問題をクリックしないようにするには- > [ファイル名を指定して実行コンフィギュレーション... - > Javaアプリケーション- >依存関係、上書きの依存関係を選択...と追加し
-p /path-to/javafx-sdk-11/lib:bin/hellofx
、プレスオーバーライド。
このソリューションでは、あなたはそれが動作します見ることができ、あなたは、コマンドラインを確認することができます。
$JAVA_HOME/bin/java -Dfile.encoding=UTF-8 \
-p $PATH_TO_FX:bin/hellofx \
-p bin/hellofx \
-classpath $PATH_TO_FX \
-p /path-to/javafx-sdk-11/lib:bin/hellofx \
-m hellofx/org.openjfx.MainApp
基本的に、私たちは、再び「右」モジュールパスオプションを追加している後にすべて失敗したもの。
今、プロジェクトが実行されますが、解決策は明らかに素敵ではありません。
ここであなたはOpenJFXのドキュメントから参照サンプルを見つけることができます。
EDIT
@kleopatraコメントに基づいて、それを動作させるために別の回避策は以下の通りであります:
何らかの理由で、ライブラリJavaFX11(モジュラー瓶を含んでいる)スキャンされないとEclipseはそのにそれらのjarファイルが含まれていない-p
オプションが、クラスパスに:
$JAVA_HOME/bin/java -Dfile.encoding=UTF-8 \
-p bin/hellofx \
-classpath $PATH_TO_FX \
...
しかし、あなたがあれば、追加モジュールパスに直接これらのjarファイルを、それが行いますそれらを追加し、これは罰金を実行します:
$JAVA_HOME/bin/java -Dfile.encoding=UTF-8 \
-p bin/hellofx:$PATH_TO_FX/javafx.base.jar:...:$PATH_TO_FX/javafx.controls \
...
そして、これで依存関係をオーバーライドする多くの必要はありません。
EDIT 2
コメントでアウト@mipaポイントとして、あったバグこの問題に出願され、それはすでに解決されています。私は、Eclipseでそれをテストした2018から12 M2 20181108から1653を、そしてそれがで動作します(4.10.0M2)ビルドID JavaFX11
ライブラリのみ(それが必要のように):
$JAVA_HOME/bin/java -Dfile.encoding=UTF-8 \
-p bin/hellofx:$PATH_TO_FX/javafx.base.jar:... \
-m hellofx/org.openjfx.MainApp