我正在尝试将Spring Boot的包装理解为" fat"罐子。从我所知道的"胖" jar有自己的特殊类,在jar运行时加载主类,并相应地设置类路径。
我无法理解的是,当我使用Eclipse将所有依赖项提取到jar中的文件夹结构中时,jar不再作为正确的Spring Boot应用程序运行。
要重复我在这里所做的事情,只需使用一个简单的Spring Boot应用程序,然后从Eclipse中选择以下内容 - :
导出 - > Runnable Jar - >选择主类 - >将所需的库提取到jar中。
只需从命令行运行jar,就像任何jar一样。 Spring Boot最初启动但失败并显示以下消息 -
2017-05-02 22:06:40.484 WARN 3468 --- [主要] ationConfigEmbeddedWebA pplicationContext:遇到异常 在上下文初始化期间 - 取消刷新尝试: org.springframework.beans.factory.BeanDefinitionStoreExcep tion: 无法处理配置类的导入候选项 [com.main.Test Main];嵌套异常是 java.lang.IllegalArgumentException:没有自动配置类 发现于META-INF / spring.factories。如果您使用自定义packa ging,确保文件正确无误。
我可以以某种方式编辑spring.factories文件以包含我的课程吗?
我只是想了解Spring如何通过Maven插件实际打包文件。
答案 0 :(得分:2)
我认为因为它是一个Spring Boot应用程序,所以你需要使用他们的插件进行构建。这是因为,spring Boot有自己的jar加载机制(Spring Boot 1.4中的BOOT-INF介绍)。
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
来自文档:
Spring Boot Maven插件在Maven中提供Spring Boot支持,允许您打包可执行jar或war档案并“就地”运行应用程序。
链接到documetantion (Appendix E)
关于spring.factories
和查找自动配置候选人的内容 - Auto-configuration