GraalVM编译Java程序为可执行exe文件

一、环境

Graalvm 22.3.1 java17 版本下载

Visual Studio 2022 社区版(安装这个是因为编译Java项目为可执行文件需要依赖几个C的头文件和动态链接库)

Windows10系统 64位

二、编译为可执行文件有优点同时也有一些弊端

优点:提升启动速度、改进内存使用、不依赖jre环境
缺点:不方便jvm参数调整(编译时已固化到exe文件内部)、变成C程序有了C程序的优点同时也带上了C的缺点,不再是Java不方便Java的项目分析工具分析程序,不在跨平台,不同CPU架构(x86,x64,arm等)需要分别编译
在这里插入图片描述

三、安装

这里不再详述具体步骤,参考1, 参考2,安装好GraalVM及native-image组件及visualstudio2022后即可测试

四、测试

测试一:将独立的Java文件编译为可执行文件

实际用得很少,可以了解一下

1.编译使用 GraalVM 的Java17的javac编译test.java为test.class
2. 点击“x64 Native Tools Command Prompt for VS 2022”进入命令行,切换到 test.class目录 cd /d D:/test/ 注意"-d"参数,然后使用native-image命令进行转化native-image test

在这里插入图片描述

测试二:将普通Java项目、或springboot3项目转为可执行文件

1. 插件

普通Java项目可以使用maven graalvm插件,springboot项目还可以使用springboot(测试用的springboot3.0.4)版本插件

           <plugin>
               <groupId>org.graalvm.buildtools</groupId>
               <artifactId>native-maven-plugin</artifactId>
               <extensions>true</extensions>
               <executions>
                   <execution>
                       <id>build-native</id>
                       <goals>
                           <goal>compile-no-fork</goal>
                       </goals>
                       <phase>package</phase>
                   </execution>
               </executions>
               <configuration>
                   <skip>false</skip>
                   <imageName>demo5</imageName>
                   <mainClass>com.example.demo.Demo5Application</mainClass>
                   <buildArgs>
                       <buildArg>--no-fallback</buildArg>
                       <buildArg>--report-unsupported-elements-at-runtime</buildArg>
                   </buildArgs>
               </configuration>
           </plugin>
           <plugin>
               <groupId>org.graalvm.buildtools</groupId>
               <artifactId>native-maven-plugin</artifactId>
           </plugin>

2、执行编译

普通maven插件挂在maven package生命周期的,直接install就可以触发了,springboot插件需要使用plugins的native:compile-no-fork进行编译转化,其实直接整会有问题的,以下详述
在这里插入图片描述

3、编译报错解决(划重点)

这些问题都是环境变量问题,idea无法找到编译需要的命令、头文件、动态链接库。

  1. 需要配置graalvm的环境变量,idea 配置SDK需要使用graalvm JDK17,这样idea就可以使用graalvm JDK17进行编译,并找到native-image命令进行转化
  2. 运行maven编译还会有找不到kernel32.lib, windows.h等问题。需要在环境变量的系统变量增加两个配置项LIB、INCLUDE,用于配置需要的动态链接目录及头文件目录。电脑搜到报错所指文件,如是缺少xx.lib则将文件目录追加到LIB,如是缺少xx.h则将文件目录追加到INCLUDE。
  3. 解决思路

1.报错基本都是none-zero result在这里插入图片描述
2.详细报错
在这里插入图片描述
3. 搜索uulid.lib 找到如下文件,选用x64的
在这里插入图片描述
4. 将文件夹路径配置环境变量系统变量LIB,解决完所有问题,我的LIB,INCLUDE如下,小版本号尽量一致,如这里都用的10.0.22000
在这里插入图片描述
在这里插入图片描述
5. 另注意修改环境变量系统变量需要重启主机,如果配置到用户变量好像重启IDEA就会加载新配置的环境变量

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值