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

SpringBoot+Gradle打包可执行Jar报错:no main manifest attribute

解决SpringBoot+Gradle打包Jar提示"no main manifest attribute"问题

核心原因

手动创建的MANIFEST.MF文件几乎不会被Gradle的打包流程正确识别——要么被SpringBoot插件生成的manifest覆盖,要么因为存放位置不符合Gradle规范而被忽略。此外,SpringBoot可执行Jar需要的manifest属性不止Main-Class,还包括Start-Class等,手动配置容易遗漏关键项。


解决方案

1. 使用SpringBoot官方Gradle插件打包(推荐)

这是最可靠的方式,插件会自动生成符合要求的manifest,并将所有依赖打包进可执行Jar:

  • 确保你的build.gradle中引入SpringBoot插件,示例配置:
    plugins {
        id 'java'
        id 'org.springframework.boot' version '3.2.0' // 替换为你的SpringBoot版本
        id 'io.spring.dependency-management' version '1.1.4'
    }
    
    group = 'com.sharelink'
    version = '0.0.1-SNAPSHOT'
    
    java {
        sourceCompatibility = '17' // 替换为你的JDK版本
    }
    
    repositories {
        mavenCentral()
    }
    
    dependencies {
        implementation 'org.springframework.boot:spring-boot-starter-web'
        testImplementation 'org.springframework.boot:spring-boot-starter-test'
    }
    
    tasks.named('test') {
        useJUnitPlatform()
    }
    
  • 执行打包命令:
    • Windows:gradlew.bat bootJar
    • Linux/Mac:./gradlew bootJar
  • 打包完成后,可执行Jar会生成在项目根目录/build/libs/下,直接用java -jar 文件名.jar运行即可。

2. 手动配置Gradle的manifest(不推荐)

如果一定要自定义manifest,需在Gradle的jar任务中配置,而非手动创建文件:

jar {
    manifest {
        attributes(
            'Manifest-Version': '1.0',
            'Main-Class': 'com.sharelink.api.SharelinkApiApplication',
            'Start-Class': 'com.sharelink.api.SharelinkApiApplication' // SpringBoot必须的属性
        )
    }
}

⚠️ 注意:这种方式打包的Jar不包含依赖,需要额外处理依赖路径,因此不建议用于SpringBoot项目。

3. 修正IntelliJ的Artifact配置

如果你用IntelliJ手动配置Artifact打包,需确保基于SpringBoot的bootJar任务:

  • 打开File -> Project Structure -> Artifacts
  • 删除现有的api_jar artifact
  • 点击+ → JAR → From modules with dependencies
  • 选择主类com.sharelink.api.SharelinkApiApplication,勾选Include in project build
  • 确认依赖打包方式选择"extract to the target JAR"或正确配置依赖路径
  • 重新构建Artifact后运行

4. 验证Jar的manifest内容

可以用命令检查Jar内的manifest是否正确:

  • 查看Jar内文件列表:jar tf api.jar,确认META-INF/MANIFEST.MF存在
  • 提取manifest文件:jar xf api.jar META-INF/MANIFEST.MF,打开文件检查是否包含Main-Class和Start-Class属性

内容的提问来源于stack exchange,提问作者Luc as

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 14:17:28