【问题标题】:Does jar manifest support `Class-Path`? Why use spring-boot-loader instead?jar 清单是否支持“类路径”?为什么要使用 spring-boot-loader 代替?
【发布时间】:2021-02-03 07:30:09
【问题描述】:

我知道 Spring Boot 使用 spring-boot-loader 打包一个可执行 jar,并使用名为 JarLauncher 的类从 BOOT-INF/lib 加载其他 jar,如 this post 中所述。

在阅读this post 之后,我认为清单中的Class-Path 也可以做到这一点。

那么为什么spring boot做这么多工作来从自定义的BOOT-INF/lib加载jar,而不是简单的写在META-INF/MANIFEST.MF

Class-Path: BOOT-INF/lib

【问题讨论】:

    标签: spring-boot manifest spring-boot-maven-plugin


    【解决方案1】:

    Class-Path 清单方法不支持从嵌套在 jar 中的 jar 文件加载类。从您在问题中链接到的 Oracle 文档中:

    Class-Path 标头指向本地网络上的类或 JAR 文件,而不是 JAR 文件中的 JAR 文件或可通过 Internet 协议访问的类。要将 JAR 文件中的 JAR 文件中的类加载到类路径中,您必须编写自定义代码来加载这些类。例如,如果 MyJar.jar 包含另一个名为 MyUtils.jar 的 JAR 文件,则不能使用 MyJar.jar 清单中的 Class-Path 标头将 MyUtils.jar 中的类加载到类路径中。

    Spring Boot 的 JarLauncherspring-boot-loader 中的其他类是允许从嵌套在 jar 中的 jar 加载类的自定义代码。

    【讨论】:

    • 对不起,我误解了我发布的Oracle doc的含义......当看到来自spring boot doc的Java does not provide any standard way to load nested jar files时,我感到很困惑。感谢指出错误,现在一切都清楚了:D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-26
    • 1970-01-01
    • 1970-01-01
    • 2018-04-10
    • 2019-09-17
    • 1970-01-01
    相关资源
    最近更新 更多