将 Spring Boot 从 2.4.X 升级到 2.6.X 后无法运行我的 jar

Posted

技术标签:

【中文标题】将 Spring Boot 从 2.4.X 升级到 2.6.X 后无法运行我的 jar【英文标题】:Can't run my jar after upgrading SpringBoot from 2.4.X to 2.6.X 【发布时间】:2022-01-22 19:41:41 【问题描述】:

我最近将我的库从 gradle 5.X 升级到 7.3.1,并将 Spring-Boot 从 2.4.X 升级到 2.6.X,但我遇到了问题。我正在使用 gradle build 创建一个 jar 并在我的服务器上执行这个 jar,它在 Spring-Boot 2.4.X 上运行良好,但现在在 2.6.X 上我遇到了一些问题:

没有主要的清单属性

所以我添加到了我的 build.gradle

jar 
   manifest 
       attributes "Main-Class": "my.package.MainClass"
   

   from 
       configurations.compileClasspath.collect  it.isDirectory() ? it : zipTree(it) 
       configurations.runtimeClasspath.collect  it.isDirectory() ? it : zipTree(it) 
   

现在我得到了错误

无法找到或加载主类 my.package.MainClass

如果我切换回 2.4.X,它工作正常。 我的罐子来自:

spring-boot 2.4.X -> 90Mo spring-boot 2.6.X -> 500 Ko

所以我尝试用 shadowJar 创建一个胖 jar 并得到这个错误

错误 org.springframework.boot.SpringApplication - 应用程序运行失败 12 月 21 日 10:04:09 vps-11602ed1 项目 [12706]:org.springframework.context.ApplicationContextException:无法启动 Web 服务器;嵌套异常是 org.springframework.context.ApplicationContextException: Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean。

如果有人得到有关如何使其与 Spring-boot 2.6.X 一起使用的答案。

提前致谢

【问题讨论】:

***.com/questions/50231736/… 我试过了: - 我的主类得到了@SpringBootApplication 并且已经从 SpringBootServletInitializer 扩展 - 添加到每个配置文件 spring.main.web-application-type=none - 案例 3 也已经完成 - 我没有使用 tomcat - 我是从 gitlab VM 构建的,所以不需要重新打包或清理 - 尝试添加 spring-boot-starter-parent - spring.profiles.active=default 没有任何效果 【参考方案1】:

我发现了问题。当我从 springboot 2.4.X 升级到 2.6.X 时,现在 gradle build 正在用我的休闲 jar 生成一个“普通”的新 jar。我将我的 jar 重命名为相同的名称。所以我没有使用最大的罐子,而是使用最小的罐子。刚刚将其添加到我的 gradle.build 中:

jar 
enabled = false

所以现在,它没有创建“普通”的 jar,一切正常

【讨论】:

以上是关于将 Spring Boot 从 2.4.X 升级到 2.6.X 后无法运行我的 jar的主要内容,如果未能解决你的问题,请参考以下文章

将 Spring Boot 升级到 2.4.1

TypeNotPresentExceptionProxy,将Spring Boot Starter父级从2.1.8升级到2.2.1

将 Spring Boot 2.3.5 升级到 2.4.0

Spring Boot 版本从 2.1.6 升级到 2.2.1 和 spring-cloud 问题

独立资源服务器(Spring Boot 2 + OAuth + JWT)在 Spring-boot 从 1.2.x 升级到 2.x 后给出 UsernameNotFoundException

从 Spring Boot 1.5 升级到 2.0 - 无法在只读事务中执行 UPDATE