Gradle构建SpringBoot应用报错:无法找到指定主类
问题解决:java.lang.NoClassDefFoundError: com.example.fileutil.FilePrepareApplication
问题原因
你用的运行命令存在冲突:java -jar 命令会优先读取jar包Manifest里指定的主类,同时完全忽略-cp/-classpath参数。你在命令后额外加的类名和-cp参数不仅无效,还会让JVM错误解析执行逻辑,导致找不到指定类。
另外当前Gradle的jar配置有遗漏:只打包了implementation依赖的内容,没明确包含项目自身编译的class文件,这也会导致jar包里缺少主类的class文件。
解决步骤
1. 修正运行命令
既然已经在Manifest中指定了Main-Class,直接用以下命令运行即可:
java -jar build/libs/file_util.jar
如果需要额外指定类路径,不要用-jar参数,改用-cp统一定义所有类路径并明确主类(Windows系统把冒号:换成分号;):
java -cp "build/libs/file_util.jar:build/classes/java/main/" com.example.fileutil.FilePrepareApplication
2. 完善Gradle的jar配置
修改jar任务配置,确保项目自身编译的class文件被打包进去:
jar { duplicatesStrategy = DuplicatesStrategy.INCLUDE project.configurations.getByName("implementation").setCanBeResolved(true) manifest { attributes 'Main-Class': 'com.example.fileutil.FilePrepareApplication' } // 同时包含项目编译的class文件和implementation依赖 from sourceSets.main.output from { configurations.implementation.collect { it.isDirectory() ? it : zipTree(it) } } }
修改后重新执行clean build,再运行jar包即可。
内容的提问来源于stack exchange,提问作者Jelly
相关产品推荐
相关产品推荐

