• 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    使用Idea的Maven可视化窗口 clean -> package -> spring-boot:process-aot -> native:build
    或者直接Maven命令, 这时在普通cmd下就可以: mvn clean package -Pnative -DskipTests & mvn native:build [推荐使用]
    打包完成
    启动exe
    访问页面
    参考文章: https://blog.csdn.net/weixin_43933728/article/details/131479472

  • 相关阅读:
    行走的offer收割机,这份十万字Java面试总结已经帮助上百人拿到大厂offer,还不快冲?
    力扣练习——50 网络延迟时间
    批量虚化边框并一键褪色的简单教程
    JUnit介绍
    如何构建线性回归模型 - 机器学习示例
    RK3399 Android7.1修改adb shell下$前的提示名称
    【C#】Mapster对象映射的使用
    apipost测试工具如何生成文档
    cf1693C. Keshi in Search of AmShZ(div1)【最短路,反向建图】
    【运维】在 Docker 容器中指定 UTF-8 编码:方法与技巧
  • 原文地址:https://blog.csdn.net/weixin_42465125/article/details/132764513