Building

此部分介绍如何构建 Spring Shell 应用程序。

Native Support

对于将 Spring Shell 应用程序编译成 GraalVM 二进制文件,支持主要是来自于 Spring FrameworkSpring Boot,其中功能被称为 AOT。即时编译是指在编译时准备应用程序上下文以准备好进行 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 时,你应该会在 build/native/nativeCompile 目录下获取二进制文件。

对于 maven,使用 spring-boot-starter-parent 作为其父,你将获取 `native`profile,可用于编译。你需要配置元数据存储库。

<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 build 时,你应该会在 target 目录下获取二进制文件。

如果一切顺利,该二进制文件可以像预期的那样运行,不必通过 jvm 执行 boot 应用程序 jar。