可执行 Jar 格式
spring-boot-loader 模块使 Spring Boot 支持可执行的 jar 和 war 文件。如果你使用 Maven 插件或 Gradle 插件,可执行 jar 会自动生成,通常你无需了解它们的工作细节。
如果你需要从不同的构建系统创建可执行 JAR 文件,或者只是对底层技术感到好奇,本附录提供了一些背景信息。
章节总结
📄️ 嵌套 JAR
Java 并未提供任何标准方式来加载嵌套的 JAR 文件(即本身包含在另一个 JAR 中的 JAR 文件)。如果你需要分发一个自包含的应用程序,并且该程序无需解压即可直接从命令行运行,这可能会带来问题。
📄️ Spring Boot 的 “NestedJarFile” 类
用于支持加载嵌套 JAR 的核心类是 NestedJarFile。它允许你从嵌套的子 JAR 数据中加载 JAR 内容。首次加载时,每个 JarEntry 的位置都会映射到外部 JAR 的物理文件偏移量,如下例所示:
📄️ 启动可执行的 JAR 文件
Launcher 类是一个特殊的引导类,用作可执行 JAR 文件的主入口点。它是你 JAR 文件中实际的 Main-Class,用于设置合适的 ClassLoader 并最终调用你的 main() 方法。
📄️ PropertiesLauncher 特性
PropertiesLauncher 具有一些特殊功能,可以通过外部属性(系统属性、环境变量、清单条目或 loader.properties)启用。下表描述了这些属性:
📄️ 可执行 Jar 限制
在使用 Spring Boot Loader 打包的应用程序时,你需要考虑以下限制:
📄️ 替代的单 JAR 解决方案
如果上述限制意味着你无法使用 Spring Boot Loader,请考虑以下替代方案: