私はJavaFXを使用するMavenプロジェクトをセットアップしています。 JavaFXにはJavaのすべてのバージョンが付属しているとは聞いていないので、ダウンロードしてjfxrt.jar
プロジェクトのlib
ディレクトリにあるファイル。
1)依存関係(JavaFXなど)をダウンロードしないように指定する方法はありますが、どちらがlib
にありますか?
2)これは、JDKを搭載した任意のマシンでプロジェクトをビルドできることを意味します(JDK 1.7の必要なし-アップデート9以降)。
2019最新のJavaFXバージョンの更新
Java 11の時点で、JavaFXはJDKから分離されているため、JavaFXライブラリはJDKインストールに自動的にバンドルされなくなりました(たとえばOracle JDK 8ディストリビューションに含まれていたように)。代わりに、JavaFXシステムはJDKから独立した一連の個別のライブラリとして設計され、アプリケーションで使用するためにMavenなどのツールによってリポジトリからダウンロードできます。
openjfx.ioには、MavenでJavaFX 11+を使用するための非常に短いチュートリアルがあります。
このチュートリアルでは、 OpenJFX JavaFX Maven Plugin の使用を推奨し、「hello、world」スタイルのアプリケーション用に次のサンプルmaven pom.xmlプロジェクトファイルを提供します。
<project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.openjfx</groupId>
<artifactId>hellofx</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>demo</name>
<url>http://maven.Apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>12.0.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.openjfx</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>0.0.2</version>
<configuration>
<mainClass>HelloFX</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>
Java 11+に使用される org.openjfx JavaFX mavenプラグイン は、 com.zenjava JavaFX mavenプラグイン とは異なることに注意してください。 Java 8および9に使用されるため、Javaバージョンに適切なものを使用します。
推奨アプローチ
Mavenを使用してJavaFXアプリを構築する場合:
Java 7とは異なり、Java 8では、JavaFXは標準のJavaランタイムクラスパス上にあるため、JavaFXをMaven依存関係として設定する必要はありません(方法と同様)スイングは今日です)。
オピニオン
jfxrt.jar
ファイルをプロジェクトlib
ディレクトリに配置するというあなたの質問のアプローチには欠陥があると思います。
欠陥がある理由は次のとおりです。
jfxrt.jar
がそれらを見つけることができる場所)。lib
ディレクトリに配置したJavaFXランタイムは、JDK 8などの新しいJDKバージョンに対して動作しない場合があります。lib
ディレクトリに配置したバージョンと競合する可能性があります。要約すると、JavaFXはプロジェクトライブラリとしてではなく、Javaランタイムシステムの一部として扱う必要があります。
JavaFXシステム依存関係サンプル
Java 7を使用する必要があり、JavaFX mavenプラグインを使用したくない場合は、あまり推奨されないアプローチを取ることができます。
lib
ディレクトリではなく)jdkからJavaFXライブラリを mavenシステム依存関係 として参照します。このサンプルはJava 7のみに提供され、Java 8には必要ありません(そのままでは機能しません)Java 8、jfxrt.jarを配置しますデフォルトのJavaランタイムクラスパスにある$ {Java.home} /lib/ext/jfxrt.jarにあり、Java 8のシステム依存関係を無関係にします。
<dependency>
<groupId>javafx</groupId>
<artifactId>jfxrt</artifactId>
<version>${Java.version}</version>
<scope>system</scope>
<systemPath>${Java.home}/lib/jfxrt.jar</systemPath>
</dependency>
このようなシステム依存関係を使用してアプリケーションをパッケージ化する場合、ユーザーがJava 7でアプリケーションを実行するときにランタイムクラスパスにjfxrt.jarを追加できるように、ユーザー向けの実行指示を記述する必要があります。これは、このアプローチを使用しない非常に良い理由です。
Mavenシステム依存性アプローチを使用することを選択した場合、maven antrun plugin を使用して JavaFX antタスク への呼び出しをin this sample 。 mavenエンフォーサプラグイン を使用して、アプリケーションに必要なJavaFXバージョンを含むJavaの少なくとも必要なバージョンに対してビルドされるようにすることもできます。働く。