JavaFXの包装:NoClassDefFoundErrorが

tannerli:

私は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、から直接であるまだ私のシステム上で利用可能。

これは(再び)を実行するために取得する方法上の任意のアイデア?

tannerli:

短い答え

私は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/javaV11を指すように。私は明示的にJavaのバイナリを指定せずに、私のjarファイルを実行したので、それが壊れました。

ランニング

/usr/lib/jvm/java-8-openjdk-amd64/bin/java -jar target/app.jar

簡単なテスト作品のために予想されるように。今、私はOpenJDKの11に私のプロジェクトをアップグレードするか、他に常に特定のJDK 8で私のアプリを実行する必要があります。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=181341&siteId=1