架构

本节将介绍如何构建 Spring Shell 应用程序。spring-doc.cadn.net.cn

首先

  1. 弹壳起始剂spring-doc.cadn.net.cn

名称 描述

弹壳起动器spring-doc.cadn.net.cn

基础Spring Shell模块spring-doc.cadn.net.cn

春壳起始者-jansispring-doc.cadn.net.cn

与JLine jansi providerspring-doc.cadn.net.cn

弹壳起始器 JNIspring-doc.cadn.net.cn

使用 JLine JNI 提供商spring-doc.cadn.net.cn

弹壳起子 JNAspring-doc.cadn.net.cn

与JLine联合会提供者合作spring-doc.cadn.net.cn

Spring-壳-起动器-ffmspring-doc.cadn.net.cn

使用 JLine ffm provider(需要 JDK22+)spring-doc.cadn.net.cn

Spring Shell起始测试spring-doc.cadn.net.cn

Spring Shell测试支持spring-doc.cadn.net.cn

终端提供商

与程序运行的底层终端交互 传统上,虽然看起来是相对复杂的过程 内容不多,全是文字。spring-doc.cadn.net.cn

还记得那些老式手动打字机或矩阵打印机吗? 打印一个字符后,需要移动光标 如果是用不同位置印刷。简而言之,这就是当前的趋势 终端模拟器是可以工作的。spring-doc.cadn.net.cn

为了更好地访问和理解现有终端仿真器环境, JLine 可以通过自己的共享库使用原生代码。JLine 检测 有哪些服务提供者存在,然后决定使用哪一家。 传统上有3家提供者,詹西,JNIJNA哪 它们应提供相同的功能。spring-doc.cadn.net.cn

我们的发酵剂可以用来专门采摘这些JLine 提供商。spring-doc.cadn.net.cn

FFM

JDK22预览版推出了外部函数和内存 API 这本应是JNI提供更好的选择 以及更安全的原生API。spring-doc.cadn.net.cn

起点3.4.x我们已经增加了编译 Spring Shell 的支持 应用JLine FFM终端服务提供者。这显然意味着 该应用程序需要运行JDK22+.有新的JDK 每6个月释放一次中期释放,长期支持(LTS)释放 每两年一次。在LTS版本出现之前,Spring Shell可以做到 与 Spring Framework 保持一致,我们将使用最新的 JDK 版本。明显地 这意味着你可能需要在一个不方便的情况下升级你的JDK 如果你选择使用时间FFM.我们也被绑定在JDK版本JLine它本身用于编译其FFM部件。spring-doc.cadn.net.cn

FFM本身会让JVM在某些部分出现警告时打印警告 使用。这些警告显然对终端应用来说很烦人 因为这可能会干扰,造成一点混乱。未来的JDK 这些警告版本也将为较旧的JNI模块添加, 这些警告最终会被改为硬性错误。用户会 必须手动启用这些原生“不安全”部件。spring-doc.cadn.net.cn

命令行中的JVM选项是:spring-doc.cadn.net.cn

--enable-native-access=ALL-UNNAMED

如果你有jar文件,可以在它的元步兵/显化。双重.spring-doc.cadn.net.cn

Enable-Native-Access: ALL-UNNAMED

这些可以在构建过程中添加,比如使用 gradle:spring-doc.cadn.net.cn

tasks.named("bootJar") {
    manifest {
        attributes 'Enable-Native-Access': 'ALL-UNNAMED'
    }
}
在 JDK 中启用原生零件,JLine 已经有了 主动且已经有检查,如果 原生访问未被启用。

本地支持

支持将 Spring Shell 应用程序编译成 GraalVM 二进制文件 主要来自 Spring FrameworkSpring Boot,其中功能 叫做《进攻的巨人》。提前准备意味着应用上下文已被准备好 在编译期间,直到准备好用于GraalVM生成。spring-doc.cadn.net.cn

基于基于框架构建的《进攻的巨人》特性,Spring Shell 具有 自己的 GraalVM 配置提供提示,提示应存在于 二元对立。通常问题来自第三方库,但它们不会 但包含与GraalVM相关的配置或这些配置 不完整。spring-doc.cadn.net.cn

通常需要使用 GraalVM 可达元数据仓库,该 为第三方库提供了一些缺失的提示。另外你需要安装GraalVMJAVA_HOME指向那个。

对于 gradle,添加 graalvm 的原生插件并配置元数据仓库。spring-doc.cadn.net.cn

plugins {
	id 'org.graalvm.buildtools.native' version '0.9.16'
}

graalvmNative {
	metadataRepository {
        enabled = true
	}
}

当 gradle 构建运行时./gradlew nativeCompile你应该买二进制 下build/native/nativeCompile目录。spring-doc.cadn.net.cn

梅文Spring靴启动父作为家长,你会得到本地配置文件可以用来进行本地编译。你需要配置元数据仓库:spring-doc.cadn.net.cn

<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你应该买二进制 下目标目录。spring-doc.cadn.net.cn

如果一切顺利,这个二进制文件可以直接运行,而不是执行 通过 JVM 启动应用程序 jar。spring-doc.cadn.net.cn