使用native-image本地镜像工具编译SpringBoot环境镜像

5 篇文章 0 订阅
1 篇文章 0 订阅

MSVC环境安装

要想在未安装Java以及其他开发环境的Windows平台运行SpringBoot项目,MSVC环境是必要的

下载VisualStudio(不是VSCode)

这里我已经下载完毕,如果已经下载过可以在Windows搜索栏搜索Visual Studio Installer
打开后在下面界面选择修改来选择新工具安装
在这里插入图片描述

打开会出现以下界面(没有安装VS自行搜索Visual Studio下载专业或者社区版安装时也会出现此节面)
在这里插入图片描述
选择使用C++的桌面开发 通用Windows平台开发这两个组件
在这里插入图片描述

切记:要记住你的安装位置(VC安装路径会显示在安装界面下方)

检查本地工具安装情况

上述过程安装完毕后,在Windows搜索栏中搜索Native Tools会出现以下两个命令行工具
在这里插入图片描述

这里使用X64 Native Tools Command即64位,X86是32位环境

安装GraalVM

本次安装GraalVM社区版本即可

GraalVM安装

GraalVM下载链接
GraalVM-ce-java17-windows-X64-22.3.2

注意,SpringBoot3必须使用22.3以上版本

下载完成解压到你要安装的目录(随意,路径不要带中文)
随后在系统环境变量中将JAVA_HOME值改为GraalVM安装路径(没有就创建一个JAVA_HOME)

验证安装

如果安装正确,在powershell或者cmd中输入java -version应当显示
在这里插入图片描述

测试gu工具

在cmd或者powershell输入gu --help应当有帮助提示输出
Windows上由于gu会与Windows命令Get-Unique冲突,所以如果提示找不到可以用**gu.cmd **代替gu
在这里插入图片描述

本地镜像工具安装

接下来安装native-image工具
native-image 下载:native-image-installable-svm-java17-windows-amd64-22.3.2.jar

之后打开powershell或cmd命令行工具
使用以下命令定位到刚刚下载的jar包所在目录
cd native-imagejar包下载目录

使用gu install --file native-image工具jar包名称安装(gu用不了用gu.cmd)

验证native-image工具安装

重启命令行输入native-image --help应当能输出命令帮助信息
在这里插入图片描述

添加系统环境变量

打开系统环境变量编辑
修改或添加以下路径
Path:
添加你的VC安装路径\App\VC\Tools\MSVC\14.37.32822\bin\Hostx64\x64
14.37.32822是版本号,每个人可能不一样找到你的具体目录拷贝进去
JAVA_HOME:
修改为GraalVM安装路径,如果你之前没有安装其他Java环境,需要在Path中添加%JAVA_HOME%\bin
INCLUED
创建INCLUDE系统环境变量
添加:

  • 自己的VC安装目录\App\VC\Tools\MSVC\14.37.32822\include;
  • C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\shared;
  • C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\ucrt;
  • C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\um;
  • C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\winrt;

去你自己对应目录找,找全后一起拼接着粘贴进去,五个路径之间用;分隔开

LIB
创建LIB系统环境变量
添加:

  • 自己的VC安装目录\App\VC\Tools\MSVC\14.37.32822\lib\x64;
  • C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22621.0\ucrt\x64;
  • C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22621.0\um\x64

和上面一样去自己对应目录找,找全后一起拼接着粘贴进去,五个路径之间用;分隔开

准备完毕

至此环境安装全部完毕,如果你需要其他的版本
可在GraalVM的GitHub页面下载:GraalVM-GitHub
之前的GraalVM和native-image均来自于此

创建示例SpringBoot项目

这里使用IDE的Spring脚手架创建
在这里插入图片描述
JDK一定要选择GraalVM

在这里插入图片描述
SpringBoot版本一定是3以上版本,依赖项选择GraalVM Native Support(必选) 和 你需要的依赖,这里我选择一个Web

项目结构

出了启动类以外简单的写一个controller模拟一个简单功能演示即可
在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/5a65317097c44e208a239450e51d4f6a.png

@RestController
public class HelloController {
    @RequestMapping("/hello")
    public String hello(){
        return "Hello GraalVM Native";
    }
}

发送hello请求返回一句Hello GraalVM Native

使用native-image打包

使用maven执行clean 和 package打包
在target目录下生成了一个项目的jar包
在这里插入图片描述

AOT处理

由于SpringBoot底层用到了大量反射,因此直接进行提前编译时不可行的,因为反射是动态的,程序在执行过程中才会决定执行什么模块,因此对于SpringBoot项目需要做额外处理。

SpringBoot脚手架在创建项目时导入了一个springboot:process-aot模块用于提前对反射模块进行处理
在这里插入图片描述
双击执行此模块即可对其进行处理
完成后target目录会生成用于AOT的预处理文件

接下来使用maven模块中项目创建自动导入的native:build进行打包
在这里插入图片描述

这里打包会出现问题
在这里插入图片描述
这是一个Bug
所以我们使用刚刚使用VC安装的native tools进行操作
右键使用管理员身份打开x64 Native Tools Command
在这里插入图片描述
接着cd 命令定位到你的项目路径下
由于这是cmd命令行,初始在C盘符,如果你项目在D盘是cd不过去的
先执行D:切换到D盘再cd就行了
在这里插入图片描述

使用mvn -Pnative native:compile执行编译
此时又会遇到问题
在这里插入图片描述
这是因为native插件的盘符路径转换问题
再idea中找到target目录下的tem目录会发现生成的args文件,每次执行编译都会生成一个args文件,任意打开一个
在这里插入图片描述
在这里插入图片描述
发现是路径出了问题,IDEA中使用Ctrl + R 将所有\\替换为/
在这里插入图片描述
复制修改后文件的文件名
在这里插入图片描述
回到x64 Native Tools Command命令行使用native-image命令打包
执行native-image @target\tmp\native-image-4652055330304047537.args
native-image-4652055330304047537.args替换为你自己修改过的文件名称

注意@target\tmp\xxx.args是路径,因为之前已经cd到项目路径所以是target\tmp\xxx.args,如果你已经再target目录则是tmp\xxx.args,如果在其他目录你可以用绝对路径

开始打包
在这里插入图片描述

在这里插入图片描述
显示Finished generating就算成功了
在target目录下会生成一些obj之类的链接文件和一个项目名称.exe文件

你可以选择在资源管理器中打开
在这里插入图片描述
随后在资源管理器地址栏直接输入powershell打开命令行
在这里插入图片描述

使用.\exe文件名称运行(直接双击是打不开的)

在这里插入图片描述
可以看到BootAotTestApplication in 0.062 seconds (process running for 0.065)
启动运行速度非常快

测试

在地址栏目输入项目启动的服务地址,我使用默认的https://localhost:8080/hello测试

在这里插入图片描述

使用native-image打包的exe文件可在任何Windows平台设备运行,不论是否安装运行环境

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
使用 react-native-image-picker 实现头像上传功能,需要先安装该库并链接到你的项目中。然后,可以按照以下步骤实现头像上传功能: 1. 创建一个按钮,用于触发选择图片的操作。例如: ``` import React, { useState } from 'react'; import { Button, Image, StyleSheet } from 'react-native'; import ImagePicker from 'react-native-image-picker'; export default function AvatarPicker() { const [avatar, setAvatar] = useState(null); const pickAvatar = () => { ImagePicker.showImagePicker( { title: 'Select Avatar', storageOptions: { skipBackup: true, path: 'images', }, }, (response) => { if (response.didCancel) { console.log('User cancelled image picker'); } else if (response.error) { console.log('ImagePicker Error: ', response.error); } else { setAvatar(response.uri); } }, ); }; return ( <> {avatar && <Image source={{ uri: avatar }} style={styles.avatar} />} <Button title="Pick Avatar" onPress={pickAvatar} /> </> ); } const styles = StyleSheet.create({ avatar: { width: 100, height: 100, borderRadius: 50, }, }); ``` 2. 在 pickAvatar 函数中调用 ImagePicker.showImagePicker 方法。这个方法接受一个选项对象和一个回调函数作为参数。选项对象可以设置一些选项,例如标题、存储选项等等。回调函数会在用户选择或拍摄一张照片后被调用,它接受一个 response 对象作为参数,该对象包含有关所选图像的信息。 3. 在回调函数中,可以根据 response 对象的属性来处理所选图像。例如,如果用户取消了选择,可以在控制台中打印一条消息。如果选择了图像,可以使用 setAvatar 方法将图像的 URI 存储在组件的状态中。 4. 最后,可以使用所选图像的 URI 来显示图像。在上面的示例中,使用 Image 组件来显示图像。 5. 将所选图像上传到服务器。可以使用 fetch 或 axios 等库将图像上传到服务器。在上传之前,可能需要将图像压缩或调整大小以减少传输时间和带宽使用

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JAVA小菜鸡223

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值