【问题标题】:Why isn't this jar packaging valid for Spring Boot?为什么这个 jar 包装对 Spring Boot 无效?
【发布时间】:2017-09-30 07:06:17
【问题描述】:

我试图了解 Spring Boot 的包装成“胖”罐子。据我所知,“胖”jar 有自己的特殊类,它们在 jar 运行时加载主类,并相应地设置类路径。

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

要重复我在这里所做的,只需使用一个简单的 Spring Boot 应用程序并从 Eclipse 中选择以下内容:

导出 --> Runnable Jar --> 选择主类 --> 将所需库提取到 jar 中。

只需像运行任何 jar 一样从命令行运行 jar。 Spring Boot 最初启动但失败并显示以下消息:

2017-05-02 22:06:40.484 警告 3468 --- [主要] ationConfigEmbeddedWebA applicationContext:遇到异常 在上下文初始化期间 - 取消 ling 刷新尝试: org.springframework.beans.factory.BeanDefinitionStoreException: 无法处理配置类的导入候选 [com.main.Test Main];嵌套异常是 java.lang.IllegalArgumentException: 没有自动配置类 在 META-INF/spring.factories 中找到。如果您使用的是自定义包装 ging,请确保该文件是正确的。

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

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

【问题讨论】:

    标签: spring spring-boot executable-jar


    【解决方案1】:

    我认为因为它是一个 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 或战争档案并“就地”运行应用程序。

    链接到文档(Appendix E) 关于spring.factories 和定位自动配置候选者的一些事情 - Auto-configuration

    【讨论】:

    • 我能以某种方式复制它吗?我可以将我的类添加到 spring.factories 文件并以某种方式运行吗? Spring Boot 类加载机制是否记录在某处?
    • 我添加了指向 Spring Boot 文档的链接
    猜你喜欢
    • 2018-04-01
    • 2015-05-18
    • 2015-06-10
    • 2016-10-13
    • 2016-07-27
    • 2012-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多