WIN11上使用GraalVM打包springboot3項目為本地可執行文件exe

耐心肝才能成功

  • 概念
  • 步驟概要
  • 詳細步驟
    • 一. GraalVM 17
    • 二. 安裝Visual Studio 2022
    • 三. 創建springboot
    • 四. IDEA最新版或者eclipse2025調試項目
    • 五. 打包exe

概念

springboot3生成的jar編譯成windows本地C++文件,不再依賴JVM運行
WINDOW編譯較為復雜,限制條件很多,需要耐心

步驟概要

一. 下載配置GraalVM 17(最好版本一致)
二. 安裝Visual Studio 2022 C++桌面開發(必須2022以上)
三. springboot官網生成項目
四. IDEA最新版或者eclipse2025調試項目
五. 打包exe(使用x64 Native Tools Command Prompt for VS 2022)

總結了deepseek(采納意見:使用x64 Native Tools Command Prompt for VS 2022打包),豆包(采納意見:springboot官網生成項目),通義千問(采納意見:下載配置GraalVM 17)等AI后步驟

詳細步驟

一. GraalVM 17

1. 下載
鏈接: GraalVM 官方下載頁面
在這里插入圖片描述
選擇適合 Windows 11 的 GraalVM 版本(建議選擇最新的穩定版本),并下載包含 Java 17 或更高版本的社區版(CE)。

2. 安裝
解壓下載的壓縮包到一個合適的目錄,例如 C:\Program Files\GraalVM。
3. 配置環境變量
打開 “系統屬性” -> “高級系統設置” -> “環境變量”。
在 “系統變量” 中,找到 Path 變量,編輯它并添加 GraalVM 的 bin 目錄,例如 C:\Program Files\GraalVM\bin。
新增 JAVA_HOME 系統變量,值為 GraalVM 的安裝目錄,例如 C:\Program Files\GraalVM。
4. 驗證安裝
打開命令提示符或 PowerShell,運行以下命令:

java -version
## 正常會出現GraalVM
  1. 安裝本地編譯插件GraalVM Native Image
## 安裝
gu install native-image
## 驗證
gu list

在這里插入圖片描述

如果無法遠程安裝,AI其他方式下載安裝

二. 安裝Visual Studio 2022

  1. 官網下載(社區版是免費的,安裝社區版就可以了,下載2022版本,2019版本經測試打包失敗)
    在這里插入圖片描述
  2. 選擇C++桌面開發(主要是要用他的一個工具x64 Native Tools Command Prompt for VS 2022)
    在這里插入圖片描述
  3. 驗證
    本地程序搜索x64 Native Tools Command Prompt for VS 2022在這里插入圖片描述

三. 創建springboot

官網創建
spring官網創建項目,IDEA創建也可以
在這里插入圖片描述

四. IDEA最新版或者eclipse2025調試項目

  • IDEA需要最新版,如果沒有,下載最新版eclipse也行

  • 這里使用eclipse-2025-03導入項目,選擇導入已存在maven項目

  • maven自行配置,要求maven-3.6.3+

  • 導入后在主類運行測試
    在這里插入圖片描述

  • 項目根目錄運行maven打包,maven打包成jar測試

## 清理下無用緩存
mvn clean
## 編譯
mvn compile
## 打包成jar
mvn package
## 運行下Jar測試
java -jar demo.jar

五. 打包exe

  • 打開x64 Native Tools Command Prompt for VS 2022(普通cmd會打包失敗,因為命令行有字符長度限制)
## 根目錄運行命令打包成exe,成功后在target目錄出現demo.exe
mvn -Pnative native:compile

以下其他可選打包方式:

  • 打包成鏡像(需要本地安裝了docker,會打包成docker鏡像)
    mvn -Pnative spring-boot:build-image
    項目過大時,加大maven內存
    mvn -Pnative native:compile -Dnative.xmx=8g

編程成功!
在這里插入圖片描述
啟動速度大幅增加
在這里插入圖片描述
常見錯誤:

在這里插入圖片描述
可能的原因:

  1. 使用了普通cmd編輯
  2. 使用了x86 Native Tools Command Prompt for VS 2022,這個編譯32位的,測試編譯不通過
  3. 未安裝x64 Native Tools Command Prompt for VS 2022,或者權限不足
  4. 反射為標明注解(本地EXE無法使用反射,需要標注,編譯時會檢查反射和JNI)
  5. 資源文件未指定(資源文件無法打包,需要指定成外部讀取)

參考

https://blog.csdn.net/qq_27935091/article/details/129981470
https://blog.csdn.net/cnzzs/article/details/145273234

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/895474.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/895474.shtml
英文地址,請注明出處:http://en.pswp.cn/news/895474.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【git-hub項目:YOLOs-CPP】本地實現01:項目構建

目錄 寫在前面 項目介紹 最新發布說明 Segmentation示例 功能特點 依賴項 安裝 克隆代碼倉庫 配置 構建項目 寫在前面 前面剛剛實現的系列文章: 【Windows/C++/yolo開發部署01】 【Windows/C++/yolo開發部署02】 【Windows/C++/yolo開發部署03】 【Windows/C++/yolo…

超越 DeepSeek V3 -->【Qwen2.5-Max】

🔥 先說明,不是廣子,不是廣子!!!單純分享這個工具給大家,畢竟最近使用 DeepSeek 太容易崩了,每天深度思考一次之后就開始轉圈圈用不了,然后就找到了這個工具使用 一、前言…

python自動化測試之Pytest框架之YAML詳解以及Parametrize數據驅動!

一、YAML詳解 YAML是一種數據類型,它能夠和JSON數據相互轉化,它本身也是有很多數據類型可以滿足我們接口 的參數類型,擴展名可以是.yml或.yaml 作用: 1.全局配置文件 基礎路徑,數據庫信息,賬號信息&…

CentOS 7操作系統部署KVM軟件和創建虛擬機

CentOS 7.9操作系統部署KVM軟件和配置指南,包括如何創建一個虛擬機。 步驟 1: 檢查硬件支持 首先,確認您的CPU支持虛擬化技術,并且已在BIOS中啟用: egrep -c (vmx|svm) /proc/cpuinfo 如果輸出大于0,則表示支持虛擬…

日本 萬葉假名

萬葉假名(まんようがな,Manyōgana)是一種早期的日語書寫系統,主要用于《萬葉集》等古代文獻中。它的特點是完全使用漢字來表示日語的音,不考慮漢字的原意。可以將其視為平假名和片假名的前身。 記住是唐代的發音不是…

【鴻蒙HarmonyOS Next實戰開發】實現組件動態創建和卸載-優化性能

一、簡介 為了解決頁面和組件加載緩慢的問題,ArkUI框架引入了動態操作功能,支持組件的預創建,并允許應用在運行時根據實際需求動態加載和渲染組件。 這些動態操作包括動態創建組件(即動態添加組件)和動態卸載組件&am…

【未完待續】關于I-Cache的一些思考

前言 最近對計組重拾興趣,想到了一些問題,本來想著會不會存在一些漏洞的,但是查閱資料發現還是自己太年輕了,架構師們早就想到了這些問題。這里簡單記錄一些與 GPT 的對話。感興趣的同學可以自行思考或查閱資料學習 與 GPT 的對…

MongoDB 7 分片副本集升級方案詳解(上)

#作者:任少近 文章目錄 前言:Mongodb版本升級升級步驟環境1.1環境準備1.2standalone升級1.3分片、副本集升級 前言:Mongodb版本升級 在開始升級之前,請參閱 MongoDB下個版本中的兼容性變更文檔,以確保您的應用程序和…

AI前端開發:跨領域合作的新引擎

隨著人工智能技術的飛速發展,AI代碼生成器等工具的出現正深刻地改變著軟件開發的模式。 AI前端開發的興起,不僅提高了開發效率,更重要的是促進了跨領域合作,讓數據科學家、UI/UX設計師和前端工程師能夠更緊密地協同工作&#xff0…

前端開發所需參考文檔—重中之中

菜鳥教程:https://www.runoob.com/ W3C:https://www.w3school.com.cn/index.html MMDN:https://developer.mozilla.org/zh-CN/ Vue3:Vue.js - 漸進式 JavaScript 框架 | Vue.js 基本上所有的前端開發基礎都可以在其中找到參考…

DeepSeek 助力 Vue 開發:打造絲滑的返回頂部按鈕(Back to Top)

前言:哈嘍,大家好,今天給大家分享一篇文章!并提供具體代碼幫助大家深入理解,徹底掌握!創作不易,如果能幫助到大家或者給大家一些靈感和啟發,歡迎收藏關注哦 💕 目錄 Deep…

C++中接口與繼承的區別(自我學習用)

繼承(Inheritance)和 接口(Interface)是面向對象編程(OOP)中的兩種不同概念,雖然在 C 中沒有像 Java 那樣的 interface 關鍵字,但可以通過 純虛函數 來實現接口的概念。讓我們詳細比…

epoll的原理

Epoll是Linux系統中高效的I/O多路復用機制,廣泛應用于高并發服務器(如Nginx、Redis)。其核心原理在于事件驅動模型和高效數據結構設計,解決了傳統select/poll的性能瓶頸。以下從數據結構、工作流程、觸發模式等維度展開分析&#…

epoll_ctl的概念和使用案例

epoll_ctl 是 Linux 系統中 I/O 多路復用機制 epoll 的核心函數之一,用于管理 epoll 實例監控的文件描述符(File Descriptor, FD)。它負責向 epoll 實例注冊、修改或刪除需要監控的 FD 及其事件類型,是實現高性能網絡編程&#xf…

Java練習(20)

ps:練習來自力扣 給你一個 非空 整數數組 nums ,除了某個元素只出現一次以外,其余每個元素均出現兩次。找出那個只出現了一次的元素。 你必須設計并實現線性時間復雜度的算法來解決此問題,且該算法只使用常量額外空間。 class Solution {pu…

Tetragon:一款基于eBPF的運行時環境安全監控工具

關于Tetragon Tetragon是一款基于eBPF的運行時環境安全監控工具,該工具可以幫助廣大研究人員檢測并應對安全重大事件,例如流程執行事件、系統調用活動、I/O活動(包括網絡和文件訪問等)。 在 Kubernetes 環境中使用時,…

1046. 最后一塊石頭的重量

文章目錄 1.題目[1046. 最后一塊石頭的重量](https://leetcode.cn/problems/last-stone-weight/description/)2.思路3.代碼 1.題目 1046. 最后一塊石頭的重量 有一堆石頭,每塊石頭的重量都是正整數。 每一回合,從中選出兩塊** 最重的** 石頭&#xff…

Qt多線程技術【線程池】:QRunnable 和 QThreadPool

在現代軟件開發中,尤其是在處理大量并發任務時,線程池技術是一種高效的解決方案。線程池不僅能提高程序的性能,還能有效管理線程的生命周期,避免頻繁的線程創建和銷毀所帶來的性能損失。本文將以Qt中的 QThreadPool 和 QRunnable …

DOM讓JavaScript可以對文檔中的標簽、屬性、內容等進行 訪增刪改 操作

示例 HTML 文檔 首先&#xff0c;我們有一個簡單的 HTML 文件 index.html&#xff0c;內容如下&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widt…

218.子結構判斷

class Solution {/*** 判斷樹 B 是否是樹 A 的子結構* param A 樹 A 的根節點* param B 樹 B 的根節點* return 如果 B 是 A 的子結構&#xff0c;返回 true&#xff1b;否則返回 false*/public boolean isSubStructure(TreeNode A, TreeNode B) {// 如果樹 B 為空&#xff0c;…