1、下载安装
官方安装说明:https://www.graalvm.org/22.0/docs/getting-started/windows/
官网:https://www.graalvm.org/downloads/
下载地址:https://github.com/graalvm/graalvm-ce-builds/releases
graalvm-ce-java17-windows-amd64-21.3.0.zip (核心组件,包含OpenJDK)
native-image-installable-svm-java17-windows-amd64-21.3.0.jar (可选组件,负责二进制编译)
解压后目录
graalvm-ce-java17-windows-amd64-21.3.0.zip是解压后可用,native-image-installable-svm-java17-windows-amd64-21.3.0.jar需要安装后才能使用。
native-image安装
本地安装
gu -L install ../../native-image-installable-svm-java17-windows-amd64-21.3.0.jar
在线安装
gu install native-image
安装成功后,查看版本
native-image --version
配置GraalVM环境变量
GRAALVM_HOME
C:\Program Files\Java\graalvm\graalvm-ce-java17-21.3.0
//PATH后边增加
%GRAALVM_HOME%\bin
2、native-image依赖C++编译二进制,需要安装vc2019和win10 sdk
安装vs2019,选中“使用C++的桌面开发”,可选组件中选择“VS 2019 C++ x64/x86”生成工具和“Windows 10 SDK”
安装完成后,需要配置VS环境变量,如果不配置则会出现下边的错误
// 出错1
Error: Default native-compiler executable 'cl.exe' not found via environment variable PATH
Error: To prevent native-toolchain checking provide command-line option -H:-CheckToolchain
Error: Use -H:+ReportExceptionStackTraces to print stacktrace of underlying exception
需要配置环境变量
MSVC
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133
Path下新增
%MSVC%\bin\HostX64\x64
// 出错2
Error: Error compiling query code (in C:\Users\penngo\AppData\Local\Temp\SVM-1701580662269299485\AMD64LibCHelperDirectives.c). Compiler command ''C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64\cl.exe' /WX /W4 /wd4244 /wd4245 /wd4800 /wd4804 /wd4214 '/FeC:\Users\penngo\AppData\Local\Temp\SVM-1701580662269299485\AMD64LibCHelperDirectives.exe' 'C:\Users\penngo\AppData\Local\Temp\SVM-1701580662269299485\AMD64LibCHelperDirectives.c'' output included error: [AMD64LibCHelperDirectives.c, C:\Users\penngo\AppData\Local\Temp\SVM-1701580662269299485\AMD64LibCHelperDirectives.c(1): fatal error C1034: stdio.h: 不包括路径集]
需要配置环境变量
WK10_INCLUDE
C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0
WK10_LIB
C:\Program Files (x86)\Windows Kits\10\Lib\10.0.19041.0
INCLUDE
%WK10_INCLUDE%\ucrt;%WK10_INCLUDE%\um;%WK10_INCLUDE%\shared;%MSVC%\include;
LIB
%WK10_LIB%\um\x64;%WK10_LIB%\ucrt\x64;%MSVC%\lib\x64;
2、编译
Graalvm是支持命令行和Maven插件的方式来编译二进制
2.1、命令行编译
项目代码
native_build.bat脚本代码
SET class_path=client-1.0-SNAPSHOT.jar;lib\animal-sniffer-annotations-1.14.jar;lib\annotations-2.0.1.jar;lib\antlr4-runtime-4.5.3.jar;lib\attoparser-2.0.5.RELEASE.jar;lib\byte-buddy-1.10.22.jar;lib\checker-compat-qual-2.0.0.jar;lib\commons-codec-1.15.jar;lib\commons-compress-1.21.jar;lib\commons-exec-1.3.jar;lib\commons-io-2.11.0.jar;lib\commons-lang3-3.12.0.jar;lib\commons-logging-1.2.jar;lib\core-1.0-SNAPSHOT.jar;lib\gluegen-rt-v2.4.0-rc-20210111.jar;lib\guava-25.0-jre.jar;lib\hamcrest-2.2.jar;lib\hamcrest-core-2.2.jar;lib\j2objc-annotations-1.1.jar;lib\jackson-annotations-2.12.6.jar;lib\jackson-core-2.12.6.jar;lib\jackson-databind-2.12.6.jar;lib\jai-imageio-core-1.4.0.jar;lib\jai-imageio-jpeg2000-1.4.0.jar;lib\javassist-3.20.0-GA.jar;lib\jcef-92.0.25.283.jar;lib\jcef-api-jcef-a51ff7f+cef-95.7.14+g9f72f35+chromium-95.0.4638.69.jar;lib\jcefmaven-95.7.14.3.jar;lib\jcseg-core-2.6.2.jar;lib\jogl-all-v2.4.0-rc-20210111.jar;lib\json-simple-1.1.1.jar;lib\jsoup-1.14.3.jar;lib\jsr305-1.3.9.jar;lib\jstyleparser-4.0.0.jar;lib\junit-4.13.2.jar;lib\log4j-api-2.17.1.jar;lib\log4j-core-2.17.1.jar;lib\log4j-slf4j-impl-2.17.1.jar;lib\nekohtml-1.9.22.jar;lib\ognl-3.1.26.jar;lib\reflections-0.9.9.jar;lib\thymeleaf-3.0.14.RELEASE.jar;lib\unbescape-1.1.6.RELEASE.jar;lib\xercesImpl-2.11.0.jar;lib\xml-apis-1.4.01.jar;
// -H:-DeleteLocalSymbols
native-image -classpath %class_path% com.penngo.graalvm.MainFrame
双击exe运行效果
2.2、maven插件编译
pom.xml中加入插件
<properties>
<graalvm.version>21.2.0</graalvm.version>
</properties>
<dependencies>
<!-- 增加的依赖包 -->
<dependency>
<groupId>org.graalvm.sdk</groupId>
<artifactId>graal-sdk</artifactId>
<version>${graalvm.version}</version>
<scope>provided</scope>
</dependency>
<!-- 增加的依赖包 -->
</dependencies>
<build>
<plugins>
<!-- 增加的插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<configuration>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.graalvm.nativeimage</groupId>
<artifactId>native-image-maven-plugin</artifactId>
<version>${graalvm.version}</version>
<executions>
<execution>
<goals>
<goal>native-image</goal>
</goals>
<phase>package</phase>
</execution>
</executions>
<configuration>
<skip>false</skip>
<imageName>MainFrame</imageName>
<mainClass>com.penngo.graalvm.MainFrame</mainClass>
<!-- - -no-fallback -H:-DeleteLocalSymbols -->
<buildArgs>
</buildArgs>
</configuration>
</plugin>
<!-- 增加的插件 -->
</plugins>
</build>
输入命令编译
mvn package
2.3、javafx的maven打包编译,使用的插件不同
<plugin>
<groupId>com.gluonhq</groupId>
<artifactId>gluonfx-maven-plugin</artifactId>
<version>1.0.11</version> <!-- 1.0.12 -->
<configuration>
<mainClass>com.penngo.graalvm.MainFrame</mainClass>
</configuration>
</plugin>
输入命令编译
mvn package gluonfx:build