Gluon 編譯 JavaFx -> exe

南怪布德發表於2024-08-31

Gluon 編譯 JavaFx -> exe

能力強的夥伴可以直接參考官方文件

開發工具

  • idea 2023.3
  • idea gluon plugin
  • git
  • apache-maven-3.8.4

環境準備

  • vs 2022 community 版本 (使用微軟官方的安裝器安裝,社群版即可)
  • jdk 11 or 17+ (可以使用idea進行下載安裝)
  • GraalVM CE Gluon 22.1.0.1-Final

vs 2022的安裝明細

(來自官網文件/platforms/windows這一節

可以參考我的安裝明細

以上步驟之後,新增一個路徑到Path環境變數中

(因為後續編譯的時候,會用到這個路徑下的cl,預設沒有新增到path,下面的版本號 14.29.30133根據自己的安裝情況設定)

C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.29.30133\bin\HostX86\x86

配置上jdk環境變數

# 新增環境變數
JAVA_HOME=D:\development\env\java\openjdk-21.0.2
CLASSPATH=.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
# Path新增條目
%JAVA_HOME%\bin
%JAVA_HOME%\jre\bin

安裝GraalVM CE Gluon 22.1.0.1-Final

下載解壓到合適的目錄後配置好環境變數

GRAALVM_HOME=D:\development\env\java\graalvm-svm-java17-windows-gluon-22.1.0.1-Final

編譯官網示例專案

(到這裡,我預設你的環境已經安裝了git、mvn等工具,並配置相應的環境變數,且以上的步驟都沒有問題)

拉取專案到本地

git clone https://github.com/gluonhq/gluon-samples.git

使用idea開啟專案,設定專案的jdk為17+,給檔案 gluon-samples/HelloFX/pom.xml檔案增加幾個build配置項

<properties>
    <main.class>hellofx.HelloFX</main.class>
    <gluonfx.target>host</gluonfx.target>
    <gluonfx.maven.plugin.version>1.0.23</gluonfx.maven.plugin.version>
    <javafx.maven.plugin.version>0.0.8</javafx.maven.plugin.version>
</properties>
<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>17</source>
                    <target>17</target>
                    <release>17</release>
                    <encoding>utf-8</encoding>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.openjfx</groupId>
                <artifactId>javafx-maven-plugin</artifactId>
                <version>${javafx.maven.plugin.version}</version>
                <configuration>
                    <mainClass>${main.class}</mainClass>
                </configuration>
            </plugin>

            <plugin>
                <groupId>com.gluonhq</groupId>
                <artifactId>gluonfx-maven-plugin</artifactId>
                <version>${gluonfx.maven.plugin.version}</version>
                <configuration>
                     <target>${gluonfx.target}</target>
                     <mainClass>${main.class}</mainClass>
                    <reflectionList>
                        <list>.*\\.db$</list>
                        <list>.*\\.xlsx$</list>
                    </reflectionList>
                </configuration>
            </plugin>
        </plugins>
    </build>

新建build.bat檔案

在專案路徑 gluon-samples/HelloFX新建一個build.bat檔案

call "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat"
mvn gluonfx:build

執行編譯

cd 專案路徑
./build.bat

檢視結果

編譯結果輸出到了 gluon-samples\HelloFX\target\gluonfx\x86_64-windows

異常處理

1.java.io.IOException: Cannot run program "cl" (in directory "D:\workspace\code\mycode\Gluon\gluon-samples\HelloFX\target\gluonfx\x86_64-windows\gvm\HelloFX"): CreateProcess error=2, 系統找不到指定的檔案。

出現這個異常是因為上面的cl指令路徑沒有新增到path環境變數中

2.java.lang.IllegalArgumentException: We currently can't compile to aarch64-linux-android when running on x86_64-microsoft-windows

這個異常是編譯在x86_64的環境中編譯aarch64-linux-android,我們搭建的環境只能編譯exe,導致這個錯誤的原因是專案的profiles設定如下

而且是直接到

這裡面去執行的編譯,在這裡執行沒有預先執行vcvars64.bat,這也是前面寫那個build指令碼的原因

修復方法就是將專案profiles選擇為desktop,同時使用指令碼去執行。

相關文章