私はMavenとOpenJDKの1.8私のpom.xmlから関連部分を使用してJavaFXアプリケーションをパッケージ化:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>ui.Main</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
今、重要なのは、この作業に使用しました。私は特に、包装は最終的に働いたのgitのコミット作られたので、私はこれを知っています。一日かそこらと複数の(私が変更かを把握することはできません)このように構築した後、私はもう次のエラーのためのjarを起動することはできません。
$ java -jar target/app.jar
Error: Could not find or load main class ui.Main Caused by:
java.lang.NoClassDefFoundError: javafx/application/Application
私はジャーの内容を表示すると、私はJavaFXのクラスを除いて、すべての依存関係が具体的に含まれていることがわかります。
私は試してみました:
- jarファイルをビルドすると
javapackager
- JavaFXの-のMavenプラグイン - と周りティンカー
- 明示的に組立・プラグインは私のためにそれをパッケージ化することを期待して、私のpom.xmlに依存関係としてのJavaFXを追加
上記のいずれも成功しませんでした。私は私のアプリを起動することができるよ唯一の方法は、JavaFXのLIBSのは、ことを意味すると思わIDE、から直接であるまだ私のシステム上で利用可能。
これは(再び)を実行するために取得する方法上の任意のアイデア?
短い答え
私はOpenJDKの8ケースを閉じた状態でそれを構築しながら、JavaFXのは含まれていませんOpenJDKの11と私のjarファイルを実行しました。
調査結果、内容を、その理由
私のIDEは問題なく私のコードを実行することができたので、私は自分のconfig /マシンに特異的であるように、問題を推定します。それは正規結局のところ/ Ubuntuが決定しました
バイオニックは、[...] [について] デフォルトJRE / JDKを移動 SRU 9月/ 2018年10月にOpenJDKが11にメインに。AskUbuntu
そして、別のSOスレッド上で指摘したように:
JavaFXの11は、JDKの一部ではありませんもう StackOverflowの
(これはまた、JDK 11でこの問題を解決する方法の指示を含みます)
マーフィーの法則はそれを持っていたとして、そして最後に、私は私が10月4日にプロジェクトをパッケージ化設定、および含まれる10月8日のapt経由でEclipseをインストールすることにしましたopenjdk-11-jdk:amd64
(これは便利に記録されます/var/log/apt/history.log
)。
これはまた、私を更新/etc/alternatives/java
V11を指すように。私は明示的にJavaのバイナリを指定せずに、私のjarファイルを実行したので、それが壊れました。
ランニング
/usr/lib/jvm/java-8-openjdk-amd64/bin/java -jar target/app.jar
簡単なテスト作品のために予想されるように。今、私はOpenJDKの11に私のプロジェクトをアップグレードするか、他に常に特定のJDK 8で私のアプリを実行する必要があります。