https://github.com/dudiao/solon-native-example
solon build graalvm native executable
https://github.com/dudiao/solon-native-example
graal-native graalvm solon
Last synced: about 2 months ago
JSON representation
solon build graalvm native executable
- Host: GitHub
- URL: https://github.com/dudiao/solon-native-example
- Owner: dudiao
- License: mit
- Created: 2023-04-14T15:58:59.000Z (about 2 years ago)
- Default Branch: master
- Last Pushed: 2024-12-13T01:57:56.000Z (6 months ago)
- Last Synced: 2025-03-25T10:42:33.780Z (2 months ago)
- Topics: graal-native, graalvm, solon
- Language: Java
- Homepage:
- Size: 483 KB
- Stars: 3
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# solon graalvm native
本项目是一个 将`solon`打包成 native 可执行程序 的示例
## 1、环境要求
`graalvm 17` & `native-image`### graalvm 17
官方安装文档:https://www.graalvm.org/latest/docs/getting-started/#install-graalvm下载地址:https://github.com/graalvm/graalvm-ce-builds/releases
下载对应的版本,建议使用 sdkman ( 安装地址:[https://sdkman.io/](https://sdkman.io/) ) 来管理不同的jdk版本
```shell
# 最新版本为:17.0.8-graalce,可以在下载地址中查看最新版本
sdk install java 17.0.8-graalce# 使用 17.0.8-graalce 版本
sdk use java 17.0.8-graalce
```### native-image
官方安装文档:https://www.graalvm.org/latest/reference-manual/native-image/#install-native-image```shell
gu install native-image
```## 2、打包成 jar
用 install 可以兼容多模块场景,用 package 只适合单模块
```shell
mvn clean install -DskipTests
```## 3、打包成 native 可执行程序
1. 引入依赖(本项目已经引入)
```xml
org.noear
solon.aot```
2. 激活 native 的 profile,执行`mvn`命令
```shell
sdk use java 17.0.7-graal# 打包成native可执行程序
mvn clean native:compile -P native -DskipTests# 运行可执行成
./target/solon-native-example
```## 4、测试
```http request
GET http://localhost:8080/hello?name=solonGET http://localhost:8080/hello/tml?name=solon
GET http://localhost:8080/htm/hello.htm
```### remote
```http request
GET http://localhost:8080/rpc/v1/user/getById?userId=11
GET http://localhost:8080/rpc/v1/user/addOrder?orderId=12
```
响应:
```json
{
"@type": "com.github.dudiao.solon.demo.User",
"user_name": "dudiao",
"wxid": "11"
}
```### service 带缓存
```http request
GET http://localhost:8080/cache/say?msg=你好
```
响应:`I want say: 你好, now: 2023-04-15 17:01:09`参数`msg`不变,响应不变,说明缓存生效
### Mybatis native
```http request
GET http://localhost:8080/user/1
```## 5、关于 graalvm native 的一些说明
当使用一个新的第三方包时,不知道第三方包中哪些地方使用了反射等 graalvm 不支持的特性,可以使用`agentlib:native-image-agent`来生成配置文件,然后在`native-image`命令中引入配置文件,这样就可以解决第三方包中的问题了
```
-agentlib:native-image-agent=config-output-dir=/Users/xxx/study/solon-native-example/target/tracing-agent
```## 6、三方包的一些不支持项
spring-boot 已经踩了很多坑了,可以作为参考:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-with-GraalVM