Gradle构建Java项目成功但运行时找不到主类JavaAddressRecorder
解决"Could not find or load main class JavaAddressRecorder"问题
核心原因
你的Jar包缺少正确的Main-Class配置——即便目标类存在于Jar中,JVM也无法识别该启动哪个类的main()方法。由于你的主类没有包声明,配置时需直接使用类名而非带包路径的全限定名。
解决方案步骤
1. 完善build.gradle的Jar配置
在你的build.gradle中添加或修改jar任务配置,明确指定主类:
plugins { id 'java' } version '1.0-SNAPSHOT' repositories { mavenCentral() } // 关键配置:指定主类 jar { manifest { attributes 'Main-Class': 'JavaAddressRecorder' } // 可选:若主类依赖的外部库需要打包进Jar,添加此配置 from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } } }
2. 重新构建并运行
- 执行清理+构建命令,确保生成最新的Jar包:
./gradlew clean build - 运行Jar包(需确保在Jar所在目录,或使用完整路径):
或者直接用Gradle的java -jar build/libs/JavaAddressRecorder-1.0-SNAPSHOT.jarrun任务启动,避免手动处理Jar的麻烦:./gradlew run
3. 验证MANIFEST.MF内容
如果问题依旧,检查Jar包内的META-INF/MANIFEST.MF文件,确认是否包含以下行:
Main-Class: JavaAddressRecorder
若没有,说明构建时配置未生效,需检查build.gradle是否正确应用了上述配置,或重新执行clean build清除旧构建产物。
4. 排查其他可能
- 确保运行
java -jar时使用的Java版本与构建时一致(执行java -version确认环境为Java 17); - 确认Jar包内的
JavaAddressRecorder.class位于根目录(无包声明的类会直接放在Jar根目录,而非子文件夹)。
内容的提问来源于stack exchange,提问作者Pierogi
相关产品推荐
相关产品推荐

