Graalvm-21 Windows初体验

news2024/11/24 9:05:25

前言
除了最新新出的jdk21以外,oracle还推出了重磅的graalvm-jdk-21。这个graalvm可以把java代码编译为本地执行文件,就是把原来的jar包直接打成exe。并且使用打完的exe占用的内存资源更小,启动速度更快,非常适合云平台部署,只是打包的时间比原来长了很多。实际用的话我们仍然可以在windows平台开发,将开发好的程序放到linux平台打成占用内存小、启动速度快的可执行文件。下面来介绍一下在Windows平台下安装和编译本地程序的过程。

前期准备

安装本地工具

在Windows平台编译要提前下载好相关的C++工具,可以使用Visual Stidio直接来安装。如下图:在单个组件里选下面这些。如果你使用的时Windows10,那么最后一项安装Windows10 SDK也可以。

在这里插入图片描述
下载安装完以后记得重启一下。

注意:如果后面遇到报错native-image building on Windows currently only supports target architecture: AMD64,回来把语言包的中文去掉,选上英文。

下载graalvm-jdk

现在大都使用idea进行开发,在File -->**Project Structre…**里可以直接下载,如下图所示,选graalvm-jdk-21就可以了。下载时间比较长,耐心等待一会。
在这里插入图片描述

安装完以后先别急着去改什么环境变量,我们全程在idea上操作的话是用不到这些配置的。另外网上有一些其他的教程会介绍手动安装native-image,这个也不需要,这样下载下来的jdk里是自带有的。至于native-image的作用,就是使用这个东西将java程序打成exe的。

编译Native Image

接下来介绍关键的步骤,将我们的代码编译成本地可执行文件。我们仍然不需要用什么复杂的命令,直接用idea的maven插件来完成。

创建项目

首先新建一个maven项目,结构如图所示,Test里就是经典的Hello World:
在这里插入图片描述

配置pom

接下来我们在pom.xml中换到阿里云的下载源,在最后添加上:

<pluginRepositories>
        <pluginRepository>
            <id>aliyun</id>
            <name>阿里云公共仓库</name>
            <url>https://maven.aliyun.com/repository/public</url>
        </pluginRepository>
    </pluginRepositories>

为了能直接使用maven插件来打包,我们需要在刚才的标签上面添加上:

<profiles>
        <profile>
            <id>native</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.graalvm.buildtools</groupId>
                        <artifactId>native-maven-plugin</artifactId>
                        <version>0.9.28</version>
                        <extensions>true</extensions>
                        <executions>
                            <execution>
                                <id>build-native</id>
                                <goals>
                                    <goal>build</goal>
                                </goals>
                                <phase>package</phase>
                            </execution>
                        </executions>

                        <configuration>
                            <fallback>false</fallback>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

这个是oracle的一个maven插件,有了它我们就能看到idea的maven插件变成了这样:
在这里插入图片描述

验收成果

这时候双击上图的package就能看到下面正在执行打包命令了,如果这里碰到报错native-image building on Windows currently only supports target architecture: AMD64,去上文看一下。有一说一,打包的时间还是比较长的,一个Hellow World要20s+。打完之后看一下目录结构,那个fortune.exe就是我们打出来的本地镜像了:
在这里插入图片描述
这个文件双击执行就可以了,如果看一闪而过不过瘾,可以在输出的语句上加个while循环。

这篇文章相比网上能找到的教程,我自认为更贴地气,贴近实际开发流程。前面一开始说过,我们通常是在Windows上开发,但是程序是部署在Linux上的,那么怎么能编译成Linux的可执行文件呢? 我没搜到直接在Windows上编的办法,但是可以使用native-image编译jar包。我们把Windows打好的jar包放到Linux上,然后在Linux上执行native-image -jar native_test.jar native_test就可以了。当然,环境还是需要再配一遍的。

贴一下官方的文档,不需要翻墙,但是英文的:

  • https://docs.oracle.com/en/graalvm/jdk/21/docs/solutions-overview/#oracle-graalvm
  • https://www.graalvm.org/latest/guides/?topic=all
  • https://graalvm.github.io/native-build-tools/latest/maven-plugin.html

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

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

相关文章

仓库管理系统源代码集合,带图片展示和网站演示

目录 1、ModernWMS2、GreaterWMS3、kopSoftWMS4、SwebWMS5、若依wms6、jeewms 1、ModernWMS 体验地址&#xff1a;https://wmsonline.ikeyly.com 简易完整的仓库管理系统 该库存管理系统是&#xff0c;我们从多年ERP系统研发中总结出来的一套针对小型物流仓储供应链流程。 简…

crs 维护模式 exclusive mode

How To Validate ASM Instances And Diskgroups On A RAC Cluster (When CRS Does Not Start). (Doc ID 1609127.1)​编辑To Bottom [rootrac1 ~]# ps -ef|grep grid root 2477 1 1 20:47 ? 00:00:51 /opt/oracle.ahf/jre/bin/java -server -Xms32m -Xmx64…

JavaScript控制流程简介

目录 条件语句 if语句 else if语句 else语句 循环语句 for循环 while循环 do...while循环 switch语句 总结 在编程中&#xff0c;控制流程是指程序执行的顺序&#xff0c;即代码按照何种方式被执行。JavaScript作为一种强大的脚本语言&#xff0c;具备了灵活的控制流…

VScode 调试 linux内核

VScode 调试 linux内核 这里调试的 linux 内核是通过 LinuxSD卡(rootfs)运行的内核 gdb 命令行调试 编辑 /home/tyustli/.gdbinit 文件&#xff0c;参考 【GDB】 .gdbinit 文件 set auto-load safe-path /home/tyustli/code/open_source/kernel/linux-6.5.7/.gdbinit在 lin…

uniapp的一些总结

目录 前言 解决方案 1. 跨平台开发 2. Vue.js生态 3. 组件库 4. 自定义组件 5. Native能力 6. 插件生态 7. 性能优化 写法 1. 模板&#xff08;Template&#xff09; 2. JavaScript 3. 样式&#xff08;Style&#xff09; 代码 高质量 结论 事件 API 1. 获取…

二叉树:有了如此高效的散列表,为什么还需要二叉树?

文章来源于极客时间前google工程师−王争专栏。 上一节我们学习了树、二叉树以及二叉树的遍历&#xff0c;今天我们再来学习一种特殊的的二叉树&#xff0c;二叉查找树。二叉查找树最大的特点就是&#xff0c;支持动态数据集合的快速插入、删除、查找操作。 我们之前说过&…

MODBUS-RTU从站通信(SMART PLC作为MODBUS-RTU从站)

SMART PLC作为MODBUS-RTU主站通信请参考下面文章链接: 【精选】PLC MODBUS通信优化、提高通信效率避免权限冲突(程序+算法描述)-CSDN博客文章浏览阅读2.5k次,点赞5次,收藏10次。MODBUS通讯非常简单、应用也非常广泛,有些老生常谈的问题,这里不再赘述,感兴趣的可以参看…

【394.字符串解码】

目录 一、题目描述二、算法原理三、代码实现 一、题目描述 二、算法原理 三、代码实现 class Solution { public:string decodeString(string s) {stack<string> s1;s1.push("");stack<int> s2;int i 0, n s.size();while (i < n){//1.如果是数字入…

听GPT 讲Rust源代码--library/std(6)

题图来自 Why you should use Python and Rust together[1] File: rust/library/std/src/sys/unix/thread_parking/netbsd.rs 文件netbsd.rs位于Rust源代码的rust/library/std/src/sys/unix/thread_parking目录下。该文件是Rust标准库中用于Unix操作系统的线程等待和唤醒机制的…

如何做好一次代码审查,什么样是一次优秀的代码审查,静态代码分析工具有哪些

代码审查是确保代码质量、提升团队协作效率、分享知识和技能的重要过程。以下是进行优秀代码审查的一些指南&#xff1a; 如何做好代码审查&#xff1a; 理解代码的背景和目的&#xff1a; 在开始审查前&#xff0c;确保你了解这次提交的背景和目的&#xff0c;这有助于更准确…

pycharm运行R语言脚本(win10环境下安装)

文章目录 简介1. pycharm安装插件2. 安装R语言解释器2.1下载安装包2.2具体安装过程 3.编辑环境变量4 检验是否安装成功&#xff1a;5.安装需要的library6.pycharm中配置安装好的R语言解释器 简介 pycharm 安装 R language for Intellij R language for Intellij 是一个插件&am…

SolidWorks2020详细步骤安装教程

SolidWorks 2020 提供了许多增强和改进功能&#xff0c;其中大多数是直接针对客户要求而做出的增强和改进,这些增强功能可以帮助您加速和改进产品开发流程。从概念设计到制造产品&#xff0c;设计、模拟、制造和协作方面的改进让您可以使用新的工作流程来缩短上市时间和提高产品…

雨云OSS服务介绍和使用教程,以及Chevereto图床使用雨云OSS的教程

雨云OSS&#xff08;对象存储&#xff09;服务介绍和使用教程&#xff0c;以及Chevereto图床程序使用雨云OSS的教程 雨云OSS&#xff08;对象存储&#xff09;是一种基于S3协议的云端数据存储服务&#xff0c;它可以帮助你将数据安全、高效地存储在云端&#xff0c;并且可以随…

vue使用WEB自带TTS实现语音文字互转

前言 时隔多日&#xff0c;自己已经好久没更新文章了&#xff1b;今年一直跟随公司的政策[BEI YA ZHA]中&#xff0c;做了一个又一个的需求&#xff0c;反而没有多少自己的时间&#xff0c;更别说突破自己 ˚‧(˚ ˃̣̣̥᷄⌓˂̣̣̥᷅ )‧˚&#xff08;雾&#xff09; 然…

JavaScript_Pig Game切换当前玩家

const current0El document.getElementById(current--0); const current1El document.getElementById(current--1); if (dice ! 1) {currentScore dice;current0El.textContent currentScore;} else {} });这是我们上个文章写的代码&#xff0c;这个代码明显是有问题的&…

图解Kafka高性能之谜(五)

高性能网络模型NIO 简单架构设计&#xff1a; 详细架构设计&#xff1a; 高性能的磁盘写技术 高性能的消息查找设计 索引文件定位使用跳表的设计 偏移量定位消息时使用稀疏索引&#xff1a; 高响应的磁盘拷贝技术 批处理设计 请求亲和性设计 内存池高效、安全设计 高性能…

Spring Boot进阶(91):从零开始,轻松打造Sofa+Spring Boot分布式开发环境

&#x1f4e3;前言 Sofa是一款基于Java语言的分布式架构&#xff0c;它的核心理念是通过将可复用的业务逻辑和服务分离出来&#xff0c;从而提高系统的可维护性和可扩展性。Spring Boot是一款基于Spring框架快速构建应用程序的工具&#xff0c;它拥有丰富的自动化配置和快速开发…

Kibana功能栏中找不到Timelion功能模块的解决

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

Maven入门与开箱即用

一、初识 Maven&#xff08;了解&#xff09; 1、项目遇到的问题 构建&#xff1a;编译代码&#xff0c;运行测试&#xff0c;打包&#xff0c;部署应用&#xff0c;运行服务器等&#xff1b;依赖&#xff1a;项目依赖大量的第三方包&#xff0c;第三方包又依赖另外的包&…

NewStarCTF2023week4-Nmap

题目要我们找出Nmap扫描得到所有的开放端口 Nmap通常用于直接扫描目标主机&#xff0c;而不是直接扫描pcap文件。 那么这里我们还是使用wireshark来分析&#xff0c;使用过滤器&#xff1a; tcp.flags.syn 1 and tcp.flags.ack 1 这个过滤条件可以筛选出TCP端口开放的数据…