环境配置
1、安装VisualStudio
这边如果C盘条件允许的话不建议修改默认的安装路径,我就是因为改了默认的安装路径,在后续配置环境的时候出现了好多问题
https://visualstudio.microsoft.com/zh-hans/free-developer-offers/
2)、安装成功之后需要重启电脑,当下图程序可以运行后则为安装成功
2、安装graalVM(可以使用Idea安装)
官网安装和jdk安装配置完全一样,下载包,将电脑原先的环境切换使用即可
-
官网下载:GraalVM
-
网盘地址: \\192.168.16.99\研发部\5 预研\springboot3
验证JDK环境为GraalVM提供的即可:
3、native-image 依赖,直接cmd下载(需要较好的网络环境)
gu install native-image
验证:
native-image
4、windows环境下编译普通的java程序
1)、准备好一个可执行的jar包文件,打包方式和以前一样。Java -jar
能正常运行。这种打包方式就是上面说的Java的编译过程,默认是解释执行,性能较低
2)、使用native-image打包本地镜像
#从入口开始,编译整个jar
native-image -cp graalVM-aot-test-1.0-SNAPSHOT.jar com.yscz.MainApplication -o hello
#编译某个类【必须有main入口方法,否则无法编译】
native-image -cp .\classes org.example.App
3)、执行成功后,会在目录下出现一个exe程序,执行这个exe程序,效果一样
5、Linux环境下编译普通Java程序
1)、安装gcc环境
sudo apt update
sudo apt install gcc libc6-dev zlib1g-dev
2)、安装graalVM
-
官网下载:https://www.graalvm.org/
-
网盘:\\192.168.16.99\研发部\5 预研\springboot3
解压压缩包(没有的目录需要提前创建一下)
tar -zxvf graalvm-jdk-17_linux-x64_bin.tar.gz -C /opt/java/
配置环境变量(如果之前使用apt安装过jdk的需要提前卸载,因为apt安装的jdk优先级较高,这边配置的可能不会生效)
vim /etc/profile
export JAVA_HOME=/opt/java/graalvm-jdk-17.0.11+7.1
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile
验证
native-image 依赖
gu install native-image
编译jar文件
native-image -cp graalVM-aot-test-1.0-SNAPSHOT.jar com.yscz.MainApplication -o hello
直接运行
总结:上述案例是将一个最简单的Java程序编译成本地镜像,在windows和Linux上环境上都成功了,但是对于一些动态的反射的方法和对象graalvm是无法编译的
优点:编译之后的程序启动更快,体积更小
缺点:
1、编译过程太长,环境配置过于复杂
2、对于一些动态的,反射的方法对象无法编译,需要做额外的处理。并且并不是所有的框架都支持graalvm的编译,但是spring全系列都是支持的,springboot对于反射和动态的代码都做了优化。
6、springboot编译
1.环境配置(很重要,并且坑较多)
path
:主要是graalvm和visualStudio的配置
INCLUDE
:都是visualStudio开发环境的配置
lib
:这边是c++需要用到的一些程序包
2.创建springboot项目,并引入graalvm的native-image组件
<build>
<plugins>
<plugin>
<groupId>org.graalvm.buildtools</groupId>
<artifactId>native-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
3.将idea的控制台的选项修改成cmd级别的,不修改的话等下打包的时候gu
命令会找不到(默认是pwoerShell)
4.当maven引入了依赖之后,在右边的maven控制台就会出现以下两个重要的选项。第一个是启用native的环境,第二个是使用native打包成本地镜像
5.打包。直接点击native:compile
,就会在target
目录下生成一个可直接运行的exe文件
7、Linux下编译springboot可执行文件
1)、配置maven环境
sudo apt install maven
mvn -version
2)、上传代码/git拉取
3)、编译执行(编译过程非常慢,但是启动速度几乎是毫秒级别的,可以和同目录下的.jar
文件执行对比一下)
mvn -Pnative native:compile
8、docker镜像运行springboot可执行文件
1)、首先需要执行上述第七步的步骤,将代码上传或者拉取到本地,并编译好一个可执行文件
2)、编写一个最简单的Dockerfile即可(因为直接是一个可执行文件,所以不需要依赖于其他镜像)
FROM debian:stable-slim
ADD ./target/springboot3-demo /usr/local/springboot3-demo
CMD ["/usr/local/springboot3-demo"]
EXPOSE 8080
3)、构建镜像
docker build -t springboot3-demo:1.0 .
4)、直接docker运行即可
docker run -p 9090:9090 springboot3-demo:1.0