前提
- OS: Windows 10 Pro
- Java: openjdk 14.0.1 2020-04-14
- JDK 14.0.1 GA Release からダウンロードして適当な位置に展開
PATH
設定済み
- JavaFX: JavaFX Windows x64 SDK 14.0.1
- JavaFX からダウンロードして適当な位置に展開
JAVAFX_HOME
設定済み
- WIX Toolset インストール済み
- Maven: Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
PATH
設定済み
プロジェクト作成から実行まで
プロジェクトテンプレート作成
> cd ${WORK_DIR}
> mvn archetype:generate
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------< org.apache.maven:standalone-pom >-------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] --------------------------------[ pom ]---------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:3.0.1:generate (default-cli) > generate-sources @ standalone-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:3.0.1:generate (default-cli) < generate-sources @ standalone-pom <<<
[INFO]
[INFO]
[INFO] --- maven-archetype-plugin:3.0.1:generate (default-cli) @ standalone-pom ---
[INFO] Generating project in Interactive mode
[INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0)
Choose archetype:
1: remote -> am.ik.archetype:elm-spring-boot-blank-archetype (Blank multi project for Spring Boot + Elm)
2: remote -> am.ik.archetype:graalvm-blank-archetype (Blank project for GraalVM)
...(snip)
2332: remote -> org.openjfx:javafx-archetype-fxml (-)
2333: remote -> org.openjfx:javafx-archetype-simple (-)
...(snip)
2720: remote -> xyz.luan.generator:xyz-generator (-)
2721: remote -> za.co.absa.hyperdrive:component-archetype (-)
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 1615: 2332
Choose org.openjfx:javafx-archetype-fxml version:
1: 0.0.1
2: 0.0.2
3: 0.0.3
4: 0.0.4
5: 0.0.5
Choose a number: 5:
Define value for property 'groupId': jp.dip.oyasirazu.study.javafx.helloworld
Define value for property 'artifactId': helloworld
Define value for property 'version' 1.0-SNAPSHOT: :
Define value for property 'package' jp.dip.oyasirazu.study.javafx.helloworld: :
[INFO] Using property: javafx-maven-plugin-version = 0.0.4
[INFO] Using property: javafx-version = 13
Confirm properties configuration:
groupId: jp.dip.oyasirazu.study.javafx.helloworld
artifactId: helloworld
version: 1.0-SNAPSHOT
package: jp.dip.oyasirazu.study.javafx.helloworld
javafx-maven-plugin-version: 0.0.4
javafx-version: 13
Y: :
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Archetype: javafx-archetype-fxml:0.0.5
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: jp.dip.oyasirazu.study.javafx.helloworld
[INFO] Parameter: artifactId, Value: helloworld
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: package, Value: jp.dip.oyasirazu.study.javafx.helloworld
[INFO] Parameter: packageInPathFormat, Value: jp/dip/oyasirazu/study/javafx/helloworld
[INFO] Parameter: package, Value: jp.dip.oyasirazu.study.javafx.helloworld
[INFO] Parameter: groupId, Value: jp.dip.oyasirazu.study.javafx.helloworld
[INFO] Parameter: javafx-version, Value: 13
[INFO] Parameter: artifactId, Value: helloworld
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: javafx-maven-plugin-version, Value: 0.0.4
[INFO] Project created from Archetype in dir: C:\Users\mikoto\project\tmp\HelloWorld\helloworld
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:23 min
[INFO] Finished at: 2020-06-09T03:13:56+09:00
[INFO] ------------------------------------------------------------------------
> cd helloworld
2332: remote -> org.openjfx:javafx-archetype-fxml (-)
: これが FXML を使った JavaFX アプリテンプレートChoose org.openjfx:javafx-archetype-fxml version:
: とりあえず最新版を選択Define value for property 'groupId': jp.dip.oyasirazu.study.javafx.helloworld
: グループ ID。パッケージ名に使われる。Define value for property 'artifactId': helloworld
: アプリ名。 jar ファイルに使われる。Define value for property 'version' 1.0-SNAPSHOT: :
: アプリバージョン番号。 デフォルトだと jar ファイル名に追加される。
${WORK_DIR}/helloworld
に 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>jp.dip.oyasirazu.study.javafx.helloworld</groupId>
<artifactId>helloworld</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>14</maven.compiler.source>
<maven.compiler.target>14</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>14</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>14</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<release>14</release>
</configuration>
</plugin>
<plugin>
<groupId>org.openjfx</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>0.0.5</version>
<configuration>
<mainClass>jp.dip.oyasirazu.study.javafx.helloworld.App</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>
maven.compiler.source
:14
へ修正maven.compiler.target
:14
へ修正javafx-controls
:version
を14
へ修正javafx-fxml
:version
を14
へ修正maven-compiler-plugin
:configuration/release
を14
へ修正javafx-maven-plugin
:version
を0.0.5
へ修正
コンパイル・ jar の作成
以下コマンドでコンパイルと jar 作成まで行われる。
.\target\helloworld-1.0-SNAPSHOT.jar
に jar が生成される。
コンパイルだけなら mvn compile
。
とりあえず実行
java -p ".\target\helloworld-1.0-SNAPSHOT.jar;$Env:JAVAFX_HOME\lib" -m "jp.dip.oyasirazu.study.javafx.helloworld/jp.dip.oyasirazu.study.javafx.helloworld.App"
ボタンを押すたびに View が切り替わるアプリ。
最小構成 JRE 生成
依存モジュールを確認
jdeps
で依存モジュールを確認。
> $DEPS = jdeps --print-module-deps --ignore-missing-deps --module-path "$Env:JAVAFX_HOME\lib" .\target\helloworld-1.0-SNAPSHOT.jar
> echo $DEPS
java.base,javafx.fxml,javafx.graphics
最小構成 JRE を作成
jlink
で最小構成 JRE を生成する。
> jlink --no-header-files --no-man-pages --compress=2 --strip-debug --add-modules $DEPS,jdk.charsets,jdk.localedata,jp.dip.oyasirazu.study.javafx.helloworld --include-locales=ja --module-path ".\target\helloworld-1.0-SNAPSHOT.jar;$Env:JAVAFX_HOME\jmods" --output "./release/app" --launcher helloworld="jp.dip.oyasirazu.study.javafx.helloworld/jp.dip.oyasirazu.study.javafx.helloworld.App"
.\release\app
に最小構成 JRE が生成され、.\release\app\bin\helloworld.bat
にランチャーが生成される。
最小構成 JRE で実行してみる
OK, うごいた。
パッケージング
jpackage
でパッケージ化
jpackage -n helloworld --app-image ./release/app --dest ./release/package --vendor "mikoto2000" --win-dir-chooser
-n
: アプリケーション名--app-image
: アプリイメージ。jlink
で作ったディレクトリを指定する--dest
: 出力先ディレクトリ。このディレクトリに[アプリケーション名].exe
が生成される--vendor
: Windows だと入れないとエラーになるようだ--win-dir-chooser
: ユーザーにインストール場所を選択させるためのフラグ
.\release\package\helloworld-1.0.exe
にインストーラーが生成される。
インストール手順はインストール - jpackage を使って HelloWorld をパッケージ化する - mikoto2000 の日記を参照。
以上。
0 件のコメント:
コメントを投稿