Java使用GraalVM Native Image打包可执行程序

news2024/9/29 8:50:47

GraalVM Native Image 技术可提前将 Java 代码编译为自包含的可执行文件。只有应用程序运行时所需的代码才会添加到可执行文件中。

也就是说打包体积会很小,不需要考虑设备有没有java环境,也不需要带着笨重的 jre 了

安装过程有很多的坑,愿你们可以一次成功...

1. 安装 GraalVM 

官方下载地址:官网下载 GraalVM     仓库下载 graalvm/graalvm-ce-builds (github.com)

注意官网主页只有Java17和20版本的,教程使用的是Java8的,需要到这里下载:Oracle GraalVM Downloads

 【免费】graalvm-ee-java8-windows-amd64-21.3.7.zip资源-CSDN文库

 下载完成后解压,修改配置Java的环境变量为解压的文件夹

 配置完环境变量后查看Java版本信息是否为GraalVM

java -version

2. 安装 Native Image

版本信息正确后执行命令安装 native-image

gu.cmd install native-image

也可以选择离线安装 

下载native-image Oracle GraalVM Downloads

执行安装命令

gu.cmd -L install native-image-installable-svm-svmee-java8-windows-amd64-21.3.7.jar

 检查是否安装成功

gu.cmd list

native-image

3. 安装 Visual Studio

需要安装运行环境visual studio和MSVC

下载Visual Studio 2022 IDE - 适用于软件开发人员的编程工具 (microsoft.com)  

Windows 10 SDK也可以。

注意:VS的安装盘符下会生成 Windows Kits 文件夹,如果找不到可以去注册表里面查看

计算机\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft SDKs\Windows\v10.0

4. 设置环境变量

 ①新增 INCLUDE

D:\Windows Kits\10\Include\10.0.22621.0\ucrt
D:\Windows Kits\10\Include\10.0.22621.0\um
D:\Windows Kits\10\Include\10.0.22621.0\shared
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.37.32822\include

②新增 LIB

D:\Windows Kits\10\Lib\10.0.22621.0\um\x64
D:\Windows Kits\10\Lib\10.0.22621.0\ucrt\x64
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.37.32822\lib\x64

 ③修改增加 Path

D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.37.32822\bin\Hostx64\x64

至此Windows就已经全部配置完成了

5. 进行exe打包测试

新建一个 HelloWorld.java

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("hello world");
    }
}

 编译class

javac HelloWorld.java

 在当前路径生成exe

native-image HelloWorld

jar包打包命令

native-image -jar demo.jar demo

异常:

找不到 cl.exe 原因是 path 环境变量配置错误

找不到 某某.h 原因是 INCLUDE 环境变量配置错误

找不到 某某.lib 原因是 LIB 环境变量配置错误

示例:graalvm/graalvm-demos:此存储库包含几个小型应用程序。这些程序说明了GraalVM的功能 (github.com)

6. Linux版

与步骤1、2同理,OS版本选Linux,下载 GraalVM 和 Native Image。

解压

tar -zxvf graalvm-ee-java8-linux-amd64-21.3.7.tar.gz

修改Java环境变量

vi /etc/profile
export JAVA_HOME=/home/hang/graalvm-ee-java8-21.3.7/
export PATH=$PATH:$JAVA_HOME/bin

使生效

source /etc/profile.d/jdk.sh

查看是否生效

echo $JAVA_HOME
java -version

安装 Native Image

在线安装:

gu install native-image

 离线安装:

gu -L install native-image-installable-svm-svmee-java8-linux-amd64-21.3.7.jar

查看是否安装成功

gu list

安装必备工具
Linux(cenots)使用 yum install gcc glibc-devel zlib-devel
Ubuntu/使用 apt-get install build-essential libz-dev zlib1g-dev
其他Linux使用 dnf install gcc glibc-devel zlib-devel libstdc++-static
其他更多:https://www.graalvm.org/latest/reference-manual/native-image/#install-native-image

 打包命令同上

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/984456.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《Web安全基础》04. 文件操作安全

web 1:文件操作安全2:文件上传漏洞2.1:简介2.2:防护与绕过2.3:WAF 绕过2.3.1:数据溢出2.3.2:符号变异2.3.3:数据截断2.3.4:重复数据 3:文件包含漏洞4&#xf…

Java EE企业级开发学习 -- day1

什么是Java EE? 它是基于Java语言的一种软件设计体系结构,它是一种标准中间件体系结构。它的作用在于能标准化企业级多层结构应用系统的部署,并且简化开发环境。 具体环境的搭建 1.下载压缩包于安装包 jdk-8u261-windows-x64 eclipse-jee-2018-12-…

Navicat15工具连接PostgreSQL15失败

1.错误现象及原因 错误现象: 错误原因: postgresql 15版本中 pg_database 系统表把 datlastsysoid 列删除了,所以造成了此错误。 2.解决方法 (1)将Navicat工具更新到官网最新版本。 (2)更换…

如何使用CSS画一个三角形

原理&#xff1a;其实就是规定元素的四个边框颜色及边框宽度&#xff0c;将元素宽高设置为0。如果要哪个方向的三角形&#xff0c;将对应其他三个方向的边框宽和颜色设置为0和透明transparent即可 1.元素设置边框&#xff0c;宽高&#xff0c;背景色 <style>.border {w…

STL vector

文章目录 一、vector 类的模拟实现 vector 是一个动态增长的数组&#xff0c;可以存储任意类型 模板参数 T 表示存储元素的类型&#xff0c;Alloc 是空间配置器&#xff0c;一般不用传 vector 的接口使用和 string 类似&#xff0c;参考 string 一、vector 类的模拟实现 vec…

Facebook 已删除 276.7 亿虚假账户,大量真实用户被“误伤”

据Cyber News消息&#xff0c;正有数以千计的用户在X&#xff08;Twitter&#xff09;及其他平台上表达对Facebook的不满&#xff0c;因为该平台在打击虚假账户时对他们的正常账户进行了“误伤”。 自 2017 年 10 月以来&#xff0c;Facebook 已删除了 276.7 亿个虚假账户&…

函数相关概念

4.函数 1.函数的概念 1.什么是函数? 把特点的代码片段,抽取成为独立运行的实体 2.使用函数的好处1.重复使用,提供效率2.提高代码的可读性3.有利用程序的维护 3.函数的分类1.内置函数(系统函数)已经提高的alert(); prompt();confirm();print()document.write(),console.log()…

实训三:多表查询 - 大学数据库创建与查询实战

大学数据库创建与查询实战 第1关&#xff1a;数据库表设计任务描述相关知识大学数据库的整体设计教师信息表&#xff08;instructor&#xff09;开课信息表&#xff08;section&#xff09; 编程要求测试说明参考代码 第2关&#xff1a;查询&#xff08;一&#xff09;任务描述…

【javaweb】学习日记Day10 - tlias智能管理系统 - 部门、员工管理功能开发

目录 一、建立项目的基本操作步骤 二、前期搭建环境 1、创建springboot工程 ​2、引入对应依赖 3、对建立好的框架进行调试 &#xff08;1&#xff09;pom.xml没有显示蓝色怎么解决&#xff1f; &#xff08;2&#xff09; 启动类为橙红色java文件怎么办&#xff1f; 4…

OSS专栏------文件上传(一)

目录 1、简单上传1.1、流式上传1.1.1、上传字符串1.1.1.1、代码示例1.1.1.2、执行结果 1.1.2、上传Byte数组1.1.2.1、代码示例1.1.2.2、执行结果 1.1.3、上传网络流1.1.3.1、代码示例1.1.3.2、执行结果 1.1.4、上传文件流1.1.4.1、代码示例1.1.4.2、执行结果 1.2、文件上传1.2.…

申威芯片UOS中opencv DNN推理

Cmake&#xff0c;opencv&#xff0c;opencv-contribute安装 #apt可能需要更新apt update apt install -y wget unzip apt-get install build-essential libgtk2.0-dev libgtk-3-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev#安装cmake apt i…

【OceanBase概念】国产数据库OceanBase的那些事儿(1)初识OceanBase

文章目录 写在前面涉及知识点1、OceanBase是什么&#xff1f;1.1基本概念1.2发展历史 2、TPC-C认证2.1什么是TPCC2.2OceanBase认证成果 3、OceanBase应用场景3.1行业应用A、金融行业B、电信运营行业C、保险行业D、初创互联网行业 3.2内部应用A、支付宝B、淘宝C、网商银行D、Pay…

草图大师SketchUp Pro 2023 for Mac

SketchUp Pro 2023 for Mac&#xff08;草图大师&#xff09;是一款专业的三维建模软件&#xff0c;由Trimble Inc.开发。它可以用于创建、修改和分享3D模型&#xff0c;包括建筑、家具、景观等。 SketchUp Pro 2023 for Mac提供了简单易学的用户界面和强大的工具集&#xff0…

【数据恢复】.360勒索病毒|金蝶、用友、OA、ERP等软件数据库恢复

引言&#xff1a; 在当今数字化的时代&#xff0c;网络犯罪已经演变成了一场全球性的威胁&#xff0c;而 360 勒索病毒则是其中最为可怕和具有破坏性的威胁之一。这种恶意软件以其危害深远、难以防范的特点而令人震惊。本文91数据恢复将深入探讨 360 勒索病毒的可怕性&#xff…

Navicat连接mysql8.0:提示无法加载身份验证插件“caching_sha2_password”

Navicat连接mysql时&#xff0c;提示&#xff1a;Unable to load authentication plugin ‘caching_sha2_password‘. 原因&#xff1a;mysql 8.0 默认使用 caching_sha2_password 身份验证机制。 D:\MySQL8.0\install\bin>mysql -uroot -p123456789 #登录 mysql: [War…

【Redis】Redis 通用命令、键的过期策略

文章目录 一、基础命令SET 和 GET 二、全局命令KEYSEXISTSDELEXPIRE 和 TTL经典面试题&#xff1a;Redis 中 key 的过期策略是怎么实现的TYPE Redis 有许多种数据结构&#xff0c;但是这些数据结构的 key 的类型都是字符串类型的&#xff08;所以说&#xff0c;Redis 不同的数据…

vue插槽slot

插槽有三种&#xff1a; 目录 1.普通插槽 2.具名插槽 3.作用域插槽 1.普通插槽 sub.vue 子组件 --- 子组件写slot标签&#xff0c;父组件的Sub标签内填写的内容会显示在slot的位置&#xff0c;父组件如果不写内容就会展示默认内容。 <template><div class"…

智慧物流发展的重要推动力量:北斗卫星导航系统

随着经济的快速发展和电商的普及&#xff0c;物流行业的规模不断扩大&#xff0c;对物流运输的效率和安全性也提出了更高的要求。传统的物流运输方式存在着效率低下、信息不对称、安全隐患等问题&#xff0c;因此发展智慧物流已经成为物流行业的必然趋势。智慧物流可以通过先进…

软文发稿平台那么多,为什么选择媒介盒子

近年来随着互联网技术的发展&#xff0c;越来越多的企业开始注重软文营销&#xff0c;品牌软文推广对企业来说是至关重要的&#xff0c;也有许多企业选择和软文发稿平台合作来增强品牌曝光&#xff0c;提升宣传效果&#xff0c;那么为什么会有这么多企业选择媒介盒子合作呢&…

2023高教社杯 国赛数学建模A题思路 - 定日镜场的优化设计

1 赛题 A 题 定日镜场的优化设计 构建以新能源为主体的新型电力系统&#xff0c; 是我国实现“碳达峰”“碳中和”目标的一项重要 措施。塔式太阳能光热发电是一种低碳环保的新型清洁能源技术[1]。 定日镜是塔式太阳能光热发电站(以下简称塔式电站)收集太阳能的基本组件&…