Graalvm安装和静态编译

原创
2022/02/20 14:34
阅读数 760

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

 

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部