You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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所在目录,或使用完整路径):
    java -jar build/libs/JavaAddressRecorder-1.0-SNAPSHOT.jar
    
    或者直接用Gradle的run任务启动,避免手动处理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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 09:15:32