Mac下使用GraalVM和SpringBoot3.1构建本地应用
准备工作
安装GraalVM工具
使用 sdkman 下载并安装 GraalVM的jdk
sdk install java 22.3.1.r17-grl
安装好后,将该sdk设置为默认
sdk default java 22.3.1.r17-grl
检查版本
java -version
openjdk version "17.0.6" 2023-01-17
OpenJDK Runtime Environment GraalVM CE 22.3.1 (build 17.0.6+10-jvmci-22.3-b13)
OpenJDK 64-Bit Server VM GraalVM CE 22.3.1 (build 17.0.6+10-jvmci-22.3-b13, mixed mode, sharing)
检查gu工具版本:
gu --version
GraalVM Updater 22.3.1
安装native-image
gu install native-image
# 若无法正常安装,可以将其github.com的下载地址手工下载jar文件到本地,之后使用 -L 参数本地安装
# 检查native-image的安装
gu list
ComponentId Version Component name Stability Origin
---------------------------------------------------------------------------------------------------------------------------------
graalvm 22.3.1 GraalVM Core Supported
native-image 22.3.1 Native Image Early adopter
创建SpringBoot3.1的Maven项目
使用idea的创建SpringBoot3.1的向导创建项目,要求选择其中的native
构建本地应用
构建时参考文章 https://blog.csdn.net/BASK2311/article/details/128830624
修改pom.xml的native-maven-plugin插件配置
将原来的
<plugin>
<groupId>org.graalvm.buildtools</groupId>
<artifactId>native-maven-plugin</artifactId>
</plugin>
添加启动类,则修改为:
<plugin>
<groupId>org.graalvm.buildtools</groupId>
<artifactId>native-maven-plugin</artifactId>
<configuration>
<mainClass>top.yjp.zentao.ZentaoTaskApplication</mainClass>
</configuration>
</plugin>
编译打包
编译和打包该SpringBoot应用的时候应该使用如下命令
mvn clean package -Pnative
构建本地应用
执行如下命令:
mvn native:compile-no-fork
经过漫长的等待后,可以看到target文件夹内编译了一个本地文件。
运行应用
cd target
./zentao-task
完整的 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.1.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>zentao-task</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>zentao-task</name>
<description>zentao-task</description>
<properties>
<java.version>17</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3.1</version>
</dependency>
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.graalvm.buildtools</groupId>
<artifactId>native-maven-plugin</artifactId>
<configuration>
<mainClass>top.yjp.zentao.ZentaoTaskApplication</mainClass>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
后记(2023-06-01)
反复测试,发现只有第一次成功了。后面编译的时候,都会报mybaits需要启用 –parameters 参数进行编译。 查了一下 mybatis-plus的issue 发现其3.5.3.1的版本其实还不支持 SpringBoot3.可能需要耐心等待一下了。 这两个链接:
https://github.com/baomidou/mybatis-plus/issues/5358
https://github.com/mybatis/mybatis-3/issues/2858
折中方案
当前(2023-06-01)可以使用如下方案代替mybatis-plus 使用 mybatis-spring 3.0.2 可以正常编译与构建本地应用,只是没有了mybatis-plus的默认CRUD的几个实现,需要自己实现。