架构
本节将介绍如何构建 Spring Shell 应用程序。
首先
-
弹壳起始剂
| 名称 | 描述 |
|---|---|
弹壳起动器 |
基础Spring Shell模块 |
春壳起始者-jansi |
与JLine jansi provider |
弹壳起始器 JNI |
使用 JLine JNI 提供商 |
弹壳起子 JNA |
与JLine联合会提供者合作 |
Spring-壳-起动器-ffm |
使用 JLine ffm provider(需要 JDK22+) |
Spring Shell起始测试 |
Spring Shell测试支持 |
终端提供商
与程序运行的底层终端交互 传统上,虽然看起来是相对复杂的过程 内容不多,全是文字。
还记得那些老式手动打字机或矩阵打印机吗? 打印一个字符后,需要移动光标 如果是用不同位置印刷。简而言之,这就是当前的趋势 终端模拟器是可以工作的。
为了更好地访问和理解现有终端仿真器环境,
JLine 可以通过自己的共享库使用原生代码。JLine 检测
有哪些服务提供者存在,然后决定使用哪一家。
传统上有3家提供者,詹西,JNI和JNA哪
它们应提供相同的功能。
我们的发酵剂可以用来专门采摘这些JLine 提供商。
FFM
跟JDK22预览版推出了外部函数和内存 API
这本应是JNI提供更好的选择
以及更安全的原生API。
起点3.4.x我们已经增加了编译 Spring Shell 的支持
应用JLine FFM终端服务提供者。这显然意味着
该应用程序需要运行JDK22+.有新的JDK
每6个月释放一次中期释放,长期支持(LTS)释放
每两年一次。在LTS版本出现之前,Spring Shell可以做到
与 Spring Framework 保持一致,我们将使用最新的 JDK 版本。明显地
这意味着你可能需要在一个不方便的情况下升级你的JDK
如果你选择使用时间FFM.我们也被绑定在JDK版本JLine它本身用于编译其FFM部件。
FFM本身会让JVM在某些部分出现警告时打印警告 使用。这些警告显然对终端应用来说很烦人 因为这可能会干扰,造成一点混乱。未来的JDK 这些警告版本也将为较旧的JNI模块添加, 这些警告最终会被改为硬性错误。用户会 必须手动启用这些原生“不安全”部件。
命令行中的JVM选项是:
--enable-native-access=ALL-UNNAMED
如果你有jar文件,可以在它的元步兵/显化。双重.
Enable-Native-Access: ALL-UNNAMED
这些可以在构建过程中添加,比如使用 gradle:
tasks.named("bootJar") {
manifest {
attributes 'Enable-Native-Access': 'ALL-UNNAMED'
}
}
| 在 JDK 中启用原生零件,JLine 已经有了 主动且已经有检查,如果 原生访问未被启用。 |
本地支持
支持将 Spring Shell 应用程序编译成 GraalVM 二进制文件 主要来自 Spring Framework 和 Spring Boot,其中功能 叫做《进攻的巨人》。提前准备意味着应用上下文已被准备好 在编译期间,直到准备好用于GraalVM生成。
基于基于框架构建的《进攻的巨人》特性,Spring Shell 具有 自己的 GraalVM 配置提供提示,提示应存在于 二元对立。通常问题来自第三方库,但它们不会 但包含与GraalVM相关的配置或这些配置 不完整。
通常需要使用 GraalVM 可达元数据仓库,该
为第三方库提供了一些缺失的提示。另外你需要安装GraalVM和JAVA_HOME指向那个。 |
对于 gradle,添加 graalvm 的原生插件并配置元数据仓库。
plugins {
id 'org.graalvm.buildtools.native' version '0.9.16'
}
graalvmNative {
metadataRepository {
enabled = true
}
}
当 gradle 构建运行时./gradlew nativeCompile你应该买二进制
下build/native/nativeCompile目录。
为梅文用Spring靴启动父作为家长,你会得到本地配置文件可以用来进行本地编译。你需要配置元数据仓库:
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.graalvm.buildtools</groupId>
<artifactId>native-maven-plugin</artifactId>
<configuration>
<metadataRepository>
<enabled>true</enabled>
</metadataRepository>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
如果你依赖Spring靴启动父它能做到原生 Maven 插件该版本保持最新。 |
当Maven构建运行时./mvnw native:compile -Pnative你应该买二进制
下目标目录。
如果一切顺利,这个二进制文件可以直接运行,而不是执行 通过 JVM 启动应用程序 jar。