构建

本节介绍如何构建 Spring Shell 应用程序。

原生支持

Spring Shell 应用程序编译成GraalVM 二进制文件的功能主要来自Spring FrameworkSpring Boot,其中该功能称为AOT。提前(Ahead of Time)意味着应用程序上下文在编译时准备就绪,以便为GraalVM 生成做好准备。

基于框架Spring ShellAOT 功能构建,它拥有自己的GraalVM 配置,用于提供有关二进制文件中应该存在哪些内容的提示。通常,问题来自尚未包含GraalVM 相关配置或这些配置不完整的第三方库。

需要使用GraalVM Reachability Metadata Repository,它为第三方库提供了一些缺失的提示。此外,您还需要安装GraalVM 并将JAVA_HOME 指向它。

对于gradle,添加 graalvm 的原生插件并配置元数据存储库。

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

graalvmNative {
	metadataRepository {
        enabled = true
	}
}

当使用./gradlew nativeCompile 运行 gradle 构建时,您应该在build/native/nativeCompile 目录下获得二进制文件。

对于maven,使用spring-boot-starter-parent 作为父级,您将获得native 配置文件,可用于进行编译。您需要配置元数据存储库

<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-boot-starter-parent,它会管理native-maven-plugin 版本,该版本会保持最新。

当使用./mvnw native:compile -Pnative 运行 maven 构建时,您应该在target 目录下获得二进制文件。

如果一切顺利,可以按原样运行此二进制文件,而不是通过 jvm 执行 boot 应用程序 jar 文件。