私は OpenJDK 11 と OpenJFX 11 に移行しています。ソースから両方を正常にビルドし、OpenJFX wiki に従って --with-import-modules=[path_to_modular_sdk] 引数を使用して JDK をビルドしました。Apache Netbeans 9 で単純な「Hello World」テスト プロジェクトを構築しようとするまでは、すべてうまくいきます。この時点で、「JavaFX デプロイメント ライブラリがアクティブな JDK に見つかりません」というエラーが表示されます。これに関する情報を検索しようとしましたが、関連するものは見つかりませんでした。誰かがこれを引き起こしているものに光を当てることができれば、私はそれを高く評価します. 助けてくれてありがとう。パトリック。
3 に答える
@mipa が指摘しているように、既存のプロジェクトを移行するために Java 11 も JavaFX 11 もビルドする必要はありません。
Apache NetBeans 9.0 に関しては、JavaFX プロジェクトの現在の ant ビルド ファイルは、まだ JavaFX 11 をサポートしていません。常に JavaFX jar を探しており、見つからない場合は停止します。これは、JavaFX が JDK の一部ではなく、手動で jar を追加する必要があった昔 (Java 8 より前) からのレガシーです。
たとえば、新しい JavaFX プロジェクトを作成しようとすると、次のエラーが発生します。
しかし、これは、NetBeans 9.0 の有無にかかわらず、JavaFX 11 を実行できないという意味ではありません。
端末で実行中
端末から Java/JavaFX 11 プロジェクトを実行できます。詳細な手順については、この入門ガイドに従ってください。
一言で言えば、必要なのは次のとおりです。
export PATH_TO_FX=/path/to/javafx-sdk-11/lib
javac --module-path $PATH_TO_FX --add-modules=javafx.controls HelloFX.java
java --module-path $PATH_TO_FX --add-modules=javafx.controls HelloFX
どこにHelloFX.java
ある:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class HelloFX extends Application {
@Override
public void start(Stage stage) {
String version = System.getProperty("java.version");
Label l = new Label ("Hello, JavaFX 11, running on " + version);
Scene scene = new Scene(new StackPane(l), 300, 200);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch();
}
}
モジュラー プロジェクト
NetBeans 9.0 でモジュラー プロジェクトを作成し、モジュールを追加します (簡単にするために という名前を付けましたがjavafx11
、これは推奨される名前ではありません)。
コードを追加する前に、JavaFX ライブラリをモジュールパスに追加しましょう。
このライブラリは、JavaFX のローカル ダウンロードの下にあるフォルダです: /Users/<user>/Downloads/javafx-sdk-11/lib/
. もちろん、自分でビルドした場合は、代わりにその場所を指すことができます。
これで、モジュールを定義できます。
module javafx11 {
requires javafx.controls;
exports javafx11;
}
上記のHelloFX
クラスをjavafx11
パッケージに追加します。
これで、プロジェクトは完全に正常に実行されます。
まだ を使用している場合でもant
、この場合、ビルド ファイルはモジュール パスの変更に合わせて更新され、JavaFX 固有のものは何もないため、プロジェクトは問題なく実行されます。
Java プロジェクト
モジュラー プロジェクトが機能する場合、通常のJava プロジェクトも NetBeans 9.0 で機能します。
Javaプロジェクト (ここでも、JavaFXプロジェクトではありません) を作成し、上記のように JavaFX ライブラリをモジュール パスに追加します。次に、コンパイルと実行の両方でこれらの VM オプションを追加する必要があります。
--module-path=/path/to/javafx-sdk-11/lib --add-modules=javafx.controls
プロジェクトは正常に実行されるはずです。
メイヴン
もう 1 つのアプローチは、ant の代わりに Maven または Gradle を使用することです。
Maven -> JavaFX プロジェクトを作成し、pom.xml ファイルを変更して、JavaFX 依存関係を追加するだけです。
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>11-ea+23</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>11-ea+23</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<release>11</release>
</configuration>
<dependencies>
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm</artifactId>
<version>6.1.1</version>
<!-- Use newer version of ASM -->
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>javafx11.HelloFX</mainClass>
</configuration>
</plugin>
</plugins>
</build>
NetBeans からクリーンアップ、ビルド、および実行すると、問題なく動作するはずです。
Gradle の場合、NetBeans 用の Gradle プラグインを含めると、同じことができます。
OpenJDK11/OpenJFX11 に移行するとおっしゃっていますが、JDK と JFX の両方を自分で構築することから始めたのはなぜですか? ここhttp://jdk.java.net/11/とここhttp://jdk.java.net/openjfx/から EA ビルドをダウンロードする方がはるかに簡単です 。 JDK は廃止されたため、JDK とは別にビルドできます。ビルド手順が最新かどうかわかりません。