普通网友 2025-04-15 23:45 采纳率: 98.7%
浏览 1
已采纳

Java -jar启动Spring Boot应用时出现“No main manifest attribute”错误如何解决?

在使用Java -jar启动Spring Boot应用时,如果遇到“No main manifest attribute”错误,通常是因为JAR包的MANIFEST.MF文件中缺少Main-Class属性定义。这导致Java无法确定程序入口点。 要解决此问题,首先确认构建工具配置是否正确。如果是Maven项目,需确保pom.xml中已添加spring-boot-maven-plugin插件,并正确配置部分以生成可执行JAR包。对于Gradle项目,则应在build.gradle中配置springBoot插件,并设置bootJar任务。 此外,检查项目的打包命令是否正确执行。例如,使用Maven时应运行“mvn clean package”命令,而非仅编译源代码。最后,验证生成的JAR包内MANIFEST.MF文件是否包含类似“Main-Class: org.springframework.boot.loader.JarLauncher”的条目。若仍存在问题,尝试删除target或build目录后重新构建项目。
  • 写回答

1条回答 默认 最新

  • 程昱森 2025-04-15 23:46
    关注

    1. 问题概述

    在使用Java -jar启动Spring Boot应用时,如果遇到“No main manifest attribute”错误,通常是因为JAR包的MANIFEST.MF文件中缺少Main-Class属性定义。这导致Java无法确定程序入口点。

    • 错误原因:JAR包的MANIFEST.MF文件中未正确指定Main-Class属性。
    • 影响范围:任何使用Spring Boot构建的应用程序,在尝试通过Java -jar命令运行时都可能遇到此问题。

    为解决这一问题,需要从构建工具配置、打包命令执行以及生成的JAR包内容验证等多个方面进行检查和调整。

    2. 构建工具配置检查

    不同的构建工具(如Maven和Gradle)有不同的插件和任务配置要求。以下是针对两种构建工具的具体配置说明:

    构建工具配置项关键点
    Maven<plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <executions>
            <execution>
               <goals>
                   <goal>repackage</goal>
               </goals>
            </execution>
        </executions>
    </plugin>
    确保spring-boot-maven-plugin插件已正确添加,并且<executions>部分包含repackage目标。
    Gradleplugins {
        id 'org.springframework.boot' version 'X.X.X'
    }
    bootJar {
        mainClassName = 'com.example.MyApplication'
    }
    确保springBoot插件已正确添加,并且bootJar任务中指定了正确的mainClassName。

    以上配置是生成可执行JAR包的关键步骤之一。

    3. 打包命令检查

    即使构建工具配置正确,也需要确保使用了正确的打包命令来生成JAR包。以下是常见的打包命令示例:

    # Maven项目
    mvn clean package
    
    # Gradle项目
    gradle clean build

    注意:仅编译源代码(如使用mvn compilegradle compileJava)不会生成可执行JAR包。

    4. 验证JAR包内容

    最后一步是验证生成的JAR包是否正确包含了MANIFEST.MF文件,并且该文件中存在类似以下条目:

    Main-Class: org.springframework.boot.loader.JarLauncher

    可以通过以下命令解压并查看MANIFEST.MF文件:

    unzip -l your-application.jar | grep META-INF/MANIFEST.MF
    jar xf your-application.jar META-INF/MANIFEST.MF
    cat META-INF/MANIFEST.MF

    若未发现上述条目,则需要重新检查构建工具配置和打包过程。

    5. 解决问题的流程图

    graph TD; A[遇到"No main manifest attribute"错误] --> B{构建工具是Maven还是Gradle?}; B --Maven--> C[检查pom.xml中是否正确配置spring-boot-maven-plugin]; B --Gradle--> D[检查build.gradle中是否正确配置springBoot插件]; C --> E[运行mvn clean package]; D --> F[运行gradle clean build]; E --> G[验证JAR包内MANIFEST.MF是否包含Main-Class条目]; F --> H[验证JAR包内MANIFEST.MF是否包含Main-Class条目]; G --否--> I[删除target目录后重新构建]; H --否--> J[删除build目录后重新构建];
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 10月23日
  • 创建了问题 4月15日