• Graalvm-21 Windows初体验


    前言
    除了最新新出的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>aliyunid>
                <name>阿里云公共仓库name>
                <url>https://maven.aliyun.com/repository/publicurl>
            pluginRepository>
        pluginRepositories>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

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

    <profiles>
            <profile>
                <id>nativeid>
                <build>
                    <plugins>
                        <plugin>
                            <groupId>org.graalvm.buildtoolsgroupId>
                            <artifactId>native-maven-pluginartifactId>
                            <version>0.9.28version>
                            <extensions>trueextensions>
                            <executions>
                                <execution>
                                    <id>build-nativeid>
                                    <goals>
                                        <goal>buildgoal>
                                    goals>
                                    <phase>packagephase>
                                execution>
                            executions>
    
                            <configuration>
                                <fallback>falsefallback>
                            configuration>
                        plugin>
                    plugins>
                build>
            profile>
        profiles>
    
    • 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

    这个是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
  • 相关阅读:
    驾驭Scala的网络之力:HTTP客户端与服务器实战指南
    YC++编译器最新版主要功能及特点简介, 请广大的编程爱好者试用,并且希望能提出更多宝贵意见,使此软件更加完善。谢谢!
    android MediaStore.ACTION_IMAGE_CAPTURE 调用照相机返回图片太小问题解决方法
    java 通过Tess4j 读取图片中的文字
    云计算学习笔记——第三章 计算虚拟化[二]
    复习Day16:栈与队列part03:150.逆波兰表达式求值、239.滑动窗口最大值、260. 只出现一次的数字III
    Swift异步序列构造器AsyncStream内部定时器(Timer)无法被触发的解决
    全国各个省份市区县明细数据
    cmd打开idea
    RISC-V架构的函数调用规范和栈布局
  • 原文地址:https://blog.csdn.net/qq_42893430/article/details/134093900