SpringBoot打包JAR/WAR运行时ClassNotFoundException问题咨询
解决Spring Boot Kotlin项目打包JAR/WAR后ClassNotFoundException的问题
移除手动配置的War Manifest属性
你当前手动设置了tasks.withType<War>里的Main-Class,这会和Spring Boot插件自动生成的Manifest内容冲突。删掉这段配置:tasks.withType<War> { manifest.attributes["Main-Class"] = "com.example.api.ExampleApplication" }Spring Boot插件会通过你配置的
springBoot.mainClass自动生成正确的Manifest,包含Main-Class(Spring Boot的启动器类)和Start-Class(你的应用启动类)。确认启动类配置正确
确保你的ExampleApplication类添加了@SpringBootApplication注解,结构如下:package com.example.api import org.springframework.boot.autoconfigure.SpringBootApplication import org.springframework.boot.runApplication @SpringBootApplication class ExampleApplication fun main(args: Array<String>) { runApplication<ExampleApplication>(*args) }如果需要将War部署到外部Servlet容器,启动类还需继承
SpringBootServletInitializer并覆盖configure方法:@SpringBootApplication class ExampleApplication : SpringBootServletInitializer() { override fun configure(application: SpringApplicationBuilder): SpringApplicationBuilder { return application.sources(ExampleApplication::class.java) } } fun main(args: Array<String>) { runApplication<ExampleApplication>(*args) }清理并重新构建项目
执行Gradle清理和构建命令,避免缓存导致的异常:./gradlew clean build使用正确命令运行打包文件
运行JAR包:java -jar build/libs/your-app-name.jar运行WAR包(Spring Boot支持直接运行WAR):
java -jar build/libs/your-app-name.war检查依赖打包情况
确保build.gradle.kts中没有排除必要依赖,Spring Boot插件默认会将所有依赖打包到JAR/WAR中(WAR包的依赖会放在WEB-INF/lib目录)。
内容的提问来源于stack exchange,提问作者tylo_wf
相关产品推荐
相关产品推荐

