Windows环境下Springboot3+Graalvm+Idea 打包成原生镜像 踩坑

复制代码
	https://github.com/oracle/graal/
    https://github.com/graalvm/graalvm-ce-builds/releases/
    对应关系
        graalvm-ce-java17-windows-amd64-X.X.X.zip
        native-image-installable-svm-java17-windows-amd64-X.X.X.jar
    本人使用:
        graalvm-ce-java17-windows-amd64-23.0.1.zip
        native-image-installable-svm-java17-windows-amd64-23.0.1.jar
    配置和JDK的配置一样,安装完后 java -version 查看对应的native-image 版本,配置完需要安装对应版本的native-image[是一个jar包]
    gu install --file native-image-installable-svm-java17-windows-amd64-X.X.X.jar
    Windows上使用Graalvm需要C++的支持,可以从微软Visual Studio Installer安装器上去安装对应的选中C++桌面应用库即可
    安装完成后就会有集成了C/C++环境的 X64 Native Tools Commond 命令行可以使用native-image命令完成打包了

    普通的Java应用直接使用Graalvm的native-image打包即可, Springboot应用需要native-maven-plugin插件支持
    普通Java应用:
        单个包含Java主启动类[假设为Main.java]的文件, 使用javac 编译后[Mian.class] 在 X64 Native Tools Commond 命令行 使用 native-image Main 即可生成exe可执行程序
        如果是一个jar包, jar里面需要插件指定好主启动类[假设为Mian] native-image -cp xxx.jar Mian
    Springboot应用:
        在 X64 Native Tools Commond 命令行 mvn clean package -Pnative -DskipTests & mvn native:build  [mvn native:compile-no-fork 也可以]
        mvn -Pnative -DskipTests clean native:compile / mvn -Pnative -DskipTests clean native:compile-no-fork
        如果直接在Idea里面通过界面的方式,或者在普通的cmd命令行[一点要注意PowerShell是不行的,这个PowerShell不会引用环境变量里面的东西],执行是有问题的,应该是缺少了C/C++的一些环境,这个解决方法是非常恶心的[就是配置环境变量KEY必须是固定的]
        如果真的是使用Graalvm作为开发JVM了, 还是建议在Linux上进行开发, 对比Windows应该会少很多问题[目前来说使用Graalvm还是有很多局限,还出在发展阶段]

    注意本人这里是Win11系统,如果是Windows10 下面的 C:\Windows Kits 前缀应该是在 C:\Program Files (x86)\Windows Kits[参考的网上的, 实在不确定 可以使用everything软件查询位置]
    Windows使用Idea的Maven可视化普通cmd命令行,就能执行native打包的 解决方法[就是对Windows下的需要的C/C++ 环境进行配置,而且有配置要求]
    都是在在Windows系统变量Path里面配置
        配置项1: Path变量里面配置 Visual Studio 的安全路径
            C:\Software\VisualStudio2022\VC\Tools\MSVC\14.37.32822\bin\Hostx64\x64
        配置项2: 新建一个KEY为INCLUDE的变量[变量名必须要INCLUDE],变量值如下,注意写的时候把他们全部使用分号; 分割写成一行即可,这里为了展示好看就没有写成一行
            C:\Software\VisualStudio2022\VC\Tools\MSVC\14.37.32822\include
            C:\Windows Kits\10\Include\10.0.22621.0\shared
            C:\Windows Kits\10\Include\10.0.22621.0\ucrt
            C:\Windows Kits\10\Include\10.0.22621.0\um
            C:\Windows Kits\10\Include\10.0.22621.0\winrt
        配置项3: 新建一个KEY为lib的变量[变量名是否必须为lib没考证过],变量值如下,同理写的时候把他们全部使用分号; 分割写成一行即可,这里为了展示好看就没有写成一行
            C:\Software\VisualStudio2022\VC\Tools\MSVC\14.37.32822\lib\x64
            C:\Windows Kits\10\Lib\10.0.22621.0\um\x64
            C:\Windows Kits\10\Lib\10.0.22621.0\ucrt\x64

使用Idea的Maven可视化窗口 clean -> package -> spring-boot:process-aot -> native:build

或者直接Maven命令, 这时在普通cmd下就可以: mvn clean package -Pnative -DskipTests & mvn native:build 推荐使用


参考文章: https://blog.csdn.net/weixin_43933728/article/details/131479472

相关推荐
2301_7807896613 小时前
跨平台适配!SDK 游戏盾兼容全终端游戏场景
java·网络·ddos
学长毕设14 小时前
基于springboot的食品仓库管理系统
java·spring boot·后端
步行cgn14 小时前
FormHttpMessageConverter 详解:Spring MVC 中表单数据的读写转换器
java·spring·mvc
龙亘川14 小时前
构建城市公共安全数字底座:亘川智城智慧安防系统全维度解读
java·大数据·开发语言·人工智能·信息可视化
金銀銅鐵14 小时前
[Java] 用 CLI 展示 EnumMap 增删键值对时的内部变化
java·源码·ai编程
秋天的怀念_David15 小时前
第二十二夜 · 数字迷雾
java·程序人生·算法
Raas10015 小时前
AI网关部署方案?从部署到上线全流程
java·开发语言·人工智能·gateway·ai网关·企业级ai网关·企业级ai产品
BIBI204915 小时前
换 Git 托管平台怎么做?基于 TortoiseGit 的跨平台迁移教程
windows·git·tortoisegit·问题解决·版本控制·最佳实践
niucloud-admin15 小时前
NIUCLOUD PHP SAAS上门家政使用文档:城市管理
java·前端·php
chushiyunen16 小时前
autoHotKey、windows自动化快捷键工具
运维·windows·自动化