LoginSignup
1
1

More than 1 year has passed since last update.

Eclipse+MavenでJavaFXの環境構築を行う

Posted at

Eclipse+MavenでJavaFXを使い、Eclipseからの実行と、実行可能jarの作成ができるまでの手順を記載する。
この手順で環境構築を行った例は以下。
https://github.com/tsyki/javafx-example

JavaFX用のEclipseプラグイン「e(fx)clipse」を入れる(任意)

マーケットプレイスからインストールする。
入れなくてもJavaFXのアプリの実行はできるが、入れておくとFXMLの編集がやりやすくなる。
例えば、FXMLで指定したIDに対応するプロパティがコントローラで定義されていない、といった場合に警告を出してくれる。
2021/9版のpleiadesにe(fx)clipse3.7を入れて動作することを確認済み

新規Mavenプロジェクトを作成

「シンプルなプロジェクトの作成」をONにして作成する

pom.xmlに以下を追加

        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-controls</artifactId>
            <version>17</version>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-fxml</artifactId>
            <version>17</version>
        </dependency>

新規JavaFXプロジェクトを作成。作成されたファイルを上記Mavenプロジェクトにコピー

FXMLを使う想定なので、ウィザードの宣言的UIはFXMLにしておく。
これにより、Main.javaSampleControler.javaapplication.cssSample.fxmlの4ファイルが作成される。
JavaFXプロジェクトだと、上記fxml、cssファイルもjavaファイルと同ディレクトリに配置されるが、Mavenプロジェクトの場合、そうすると実行可能jarを作成する際にfxml、cssファイルがjarに含まれない。
このため、Mavenプロジェクトにコピーする際は、fxml、cssファイルはresources以下に配置する。
(開発時はFXMLと対応するコントローラは同ディレクトリにあった方がやりやすいのだが…)

mainを実行するクラスを新規に追加する

上記手順で作成されたMainクラスがmainを実装しているが、これを直接Eclipseから実行しようとすると、エラー: JavaFXランタイム・コンポーネントが不足しており、このアプリケーションの実行に必要ですのエラーが発生して実行できない。
これを避けるために、Mainクラスのmainを呼ぶだけのクラスを作成し、そこから実行するようにする。
参考:https://torutk.hatenablog.jp/entry/2018/12/01/215113

maven-assemblyプラグインを入れる

以下をpom.xmlに追加する。これによりmvn packageで実行可能jarが作成可能となる。

    <build>
        <plugins>
            <!-- 実行可能jarファイル用のプラグイン -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.3.0</version>
                <configuration>
                    <!-- TODO jarファイルの名前になるので適宜修正 -->
                    <finalName>javafx-example</finalName>
                    <descriptorRefs>
                        <!-- 依存するリソースをすべてjarに同梱する -->
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                        <manifest>
                            <!-- TODO mainを実行するクラスを指定 -->
                            <mainClass>jp.gr.java_conf.tsyki.javafx.EntryPoint</mainClass>
                        </manifest>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <!-- idタグは任意の文字列であれば何でもよい -->
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1