安装环境
进入下载的vm bin目录下,打开cmd,执行如下命令
安装native-image
gu install native-image
D:\jdks\graalvm-ce-java11-22.3.1\bin>gu install native-image
Downloading: Component catalog from www.graalvm.org
Processing Component: Native Image
Downloading: Component native-image: Native Image from github.com
Installing new component: Native Image (org.graalvm.native-image, version 22.3.1)
查看安装情况
gu list
如下,表示没有安装,native-image
ComponentId Version Component name Stability Origin
---------------------------------------------------------------------------------------------------------------------------------
graalvm 22.3.1 GraalVM Core Supported
安装成功,会多一个native-image
D:\jdks\graalvm-ce-java11-22.3.1\bin>gu list
ComponentId Version Component name Stability Origin
---------------------------------------------------------------------------------------------------------------------------------
graalvm 22.3.1 GraalVM Core Supported
native-image 22.3.1 Native Image Early adopter github.com
编译成本地exe
安装vs,
打开
x64 Native Tools Command Prompt for VS 2022
设置环境变量
setx /M PATH "D:\jdks\graalvm-ce-java11-22.3.1\bin;%PATH%"
# Java环境
setx /M JAVA_HOME "D:\jdks\graalvm-ce-java11-22.3.1"
环境成功
C:\Users\wwj>native-image
Please specify options for native-image building or use --help for more info.
开始编译
在上上面的窗口,进入到class文件,
注意需要使用类的全路径,不要带class
native-image xxx
如果出现某些文件找不到,就使用管理员模式
C:\Users\wwj\IdeaProjects\untitled4\target\classes>native-image org.example.DateTimeTools
========================================================================================================================
GraalVM Native Image: Generating 'org.example.datetimetools' (executable)...
========================================================================================================================
[1/7] Initializing... (6.2s @ 0.11GB)
Version info: 'GraalVM 22.3.1 Java 11 CE'
Java version info: '11.0.18+10-jvmci-22.3-b13'
C compiler: cl.exe (microsoft, x64, 19.35.32216)
Garbage collector: Serial GC
[2/7] Performing analysis... [*****] (11.4s @ 1.16GB)
3,954 (74.49%) of 5,308 classes reachable
5,867 (57.38%) of 10,225 fields reachable
17,663 (43.92%) of 40,213 methods reachable
27 classes, 0 fields, and 335 methods registered for reflection
62 classes, 53 fields, and 52 methods registered for JNI access
1 native library: version
[3/7] Building universe... (1.8s @ 0.42GB)
[4/7] Parsing methods... [*] (1.4s @ 1.49GB)
[5/7] Inlining methods... [***] (1.0s @ 2.07GB)
[6/7] Compiling methods... [***] (7.1s @ 3.83GB)
[7/7] Creating image... (2.4s @ 0.50GB)
5.91MB (40.60%) for code area: 9,695 compilation units
8.39MB (57.65%) for image heap: 115,109 objects and 6 resources
260.70KB ( 1.75%) for other data
14.55MB in total
------------------------------------------------------------------------------------------------------------------------
Top 10 packages in code area: Top 10 object types in image heap:
701.37KB java.util 1.24MB byte[] for code metadata
473.19KB java.awt 1.12MB java.lang.String
337.10KB java.lang 1011.96KB byte[] for general heap data
284.67KB javax.swing 882.65KB java.lang.Class
275.57KB javax.swing.plaf.metal 696.81KB byte[] for java.lang.String
234.46KB javax.swing.plaf.basic 403.92KB java.util.HashMap$Node
215.67KB java.text 352.37KB char[]
207.96KB java.util.regex 339.80KB com.oracle.svm.core.hub.DynamicHubCompanion
204.29KB java.util.concurrent 215.41KB java.lang.String[]
127.54KB com.oracle.svm.core.code 212.30KB java.util.HashMap$Node[]
2.84MB for 146 more packages 1.59MB for 894 more object types
------------------------------------------------------------------------------------------------------------------------
0.8s (2.4% of total time) in 19 GCs | Peak RSS: 4.73GB | CPU load: 4.93
------------------------------------------------------------------------------------------------------------------------
Produced artifacts:
C:\Users\wwj\IdeaProjects\untitled4\target\classes\awt.dll (jdk_lib)
C:\Users\wwj\IdeaProjects\untitled4\target\classes\fontmanager.dll (jdk_lib)
C:\Users\wwj\IdeaProjects\untitled4\target\classes\freetype.dll (jdk_lib)
C:\Users\wwj\IdeaProjects\untitled4\target\classes\java.dll (jdk_lib_shim)
C:\Users\wwj\IdeaProjects\untitled4\target\classes\javaaccessbridge.dll (jdk_lib)
C:\Users\wwj\IdeaProjects\untitled4\target\classes\jawt.dll (jdk_lib)
C:\Users\wwj\IdeaProjects\untitled4\target\classes\jvm.dll (jdk_lib_shim)
C:\Users\wwj\IdeaProjects\untitled4\target\classes\lcms.dll (jdk_lib)
C:\Users\wwj\IdeaProjects\untitled4\target\classes\org.example.datetimetools.build_artifacts.txt (txt)
C:\Users\wwj\IdeaProjects\untitled4\target\classes\org.example.datetimetools.exe (executable)
========================================================================================================================
Finished generating 'org.example.datetimetools' in 32.9s.
编译带有图形功能的Java程序
awt.dll
fontmanager.dll
freetype.dll
java.dll
javaaccessbridge.dll
jawt.dll
jvm.dll
lcms.dll
org.example.datetimetools.build_artifacts.txt
org.example.datetimetools.exe
但是运行时,加载不到图形类,无法运行。
$ ./org.example.datetimetools.exe
Exception in thread "main" java.lang.NoSuchMethodError: java.awt.Toolkit.getDefaultToolkit()Ljava/awt/Toolkit;
at org.graalvm.nativeimage.builder/com.oracle.svm.core.jni.functions.JNIFunctions$Support.getMethodID(JNIFunctions.java:1259)
at org.graalvm.nativeimage.builder/com.oracle.svm.core.jni.functions.JNIFunctions$Support.getMethodID(JNIFunctions.java:1244)
at org.graalvm.nativeimage.builder/com.oracle.svm.core.jni.functions.JNIFunctions.GetStaticMethodID(JNIFunctions.java:413)
at java.desktop@11.0.18/java.awt.Toolkit.initIDs(Toolkit.java)
at java.desktop@11.0.18/java.awt.Toolkit.<clinit>(Toolkit.java:1427)
at java.desktop@11.0.18/java.awt.Component.<clinit>(Component.java:621)
at java.base@11.0.18/java.lang.Class.ensureInitialized(DynamicHub.java:528)
at java.base@11.0.18/java.lang.Class.ensureInitialized(DynamicHub.java:528)
at java.base@11.0.18/java.lang.Class.ensureInitialized(DynamicHub.java:528)
at java.base@11.0.18/java.lang.Class.ensureInitialized(DynamicHub.java:528)
at java.base@11.0.18/java.lang.Class.ensureInitialized(DynamicHub.java:528)