为什么这个 jar 包对 Spring 引导无效?

Why isn't this jar packaging valid for Spring Boot?

我试图了解 Spring 引导到 "fat" 罐子的包装。据我所知,"fat" 罐子有自己的特殊 classes,当罐子 运行ning 时加载主 class 并且还设置 classpath因此。

我无法理解的是,为什么当我使用 Eclipse 将所有依赖项提取到 jar 中的文件夹结构时,jar 不再 运行 作为正确的 Spring 启动应用程序。

要重复我在这里所做的,只需使用一个简单的 Spring 引导应用程序,然后从 Eclipse select 执行以下操作:

Export --> Runnable Jar --> Select Main Class --> Extract required libraries into jar.

只需 运行 命令行中的 jar,就像任何 jar 一样。 Spring 引导最初启动但失败并显示以下消息-:

2017-05-02 22:06:40.484 WARN 3468 --- [ main] ationConfigEmbeddedWebA pplicationContext : Exception encountered during context initialization - cancel ling refresh attempt: org.springframework.beans.factory.BeanDefinitionStoreExcep tion: Failed to process import candidates for configuration class [com.main.Test Main]; nested exception is java.lang.IllegalArgumentException: No auto configuration classes found in META-INF/spring.factories. If you are using a custom packa ging, make sure that file is correct.

我能以某种方式编辑 spring.factories 文件以包含我的 classses 吗?

我只是想了解 Spring 如何通过其 Maven 插件实际打包文件。

我认为因为它是一个 Spring 引导应用程序,所以您需要使用他们的插件来构建。这是因为,spring Boot 有自己的 jar 加载机制(Spring Boot 1.4 中的 BOOT-INF 介绍)。

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
</plugin>

来自文档:

The Spring Boot Maven Plugin provides Spring Boot support in Maven, allowing you to package executable jar or war archives and run an application “in-place”.

Link 记录 (Appendix E) 关于 spring.factories and locating auto-configuration candidates - Auto-configuration