No Main Manifest Attribute

2025 年 5 月 2 日 | 阅读 2 分钟

在 Java 项目中,每个可执行的 jar 文件都包含一个 main 方法。通常,它位于应用程序的起始点。要通过自执行 jar 文件执行 main 方法,我们必须有一个正确的清单文件,并将其包装在项目的正确位置。这些文件有一个主清单属性,用于定义包含 main 方法的类的路径。

有时,我们有一个自执行 jar,当我们尝试执行项目时,它会抛出以下错误消息

上述错误消息是因为 MANIFEST.MF 文件中缺少 Main-Class 条目而抛出的。

您可能会在任何基于配置的 Java 项目中遇到此问题。让我们讨论其解决方案

解决方案

让我们来了解不同项目中的解决方案

Maven

Maven 项目中,此问题可能是由于 MANIFEST.MF 文件中缺少 Main-Class 条目而引起的。为了克服这个问题,我们可以通过在 pom.xml 文件中手动放置一个 maven-jar-plugin 来在 pom.xml 文件中定义它。

在上面的代码中,com.javatpoint.AppMain 是我们的 Main-Class 的完全限定名。您需要根据类路径替换完全限定名。要复制完全限定名,请右键单击包含 main 类的包,然后选择 Copy Fully Qualified Name

Gradle

如果您在 Gradle 项目中遇到此错误,可以通过在 build.gradle 文件中放置以下条目来解决

Spring Boot 应用程序

有时,您可能会在 Spring Boot 项目中遇到此错误。在 Spring Boot 项目中解决此错误很容易。要修复 SB 项目中的此错误,请将 maven-plugin 依赖项放在 pom.xml 文件中的 <plugins> 标签下。

无主清单属性错误的根本原因

“无主清单属性错误”通常是因为您在位于 META-INF 文件夹下的 MANIFEST.MF 文件中出了问题。默认情况下,它具有以下条目

其中,

Manifest-Version 是清单文件的版本。

Built-By 是您的 PC 名称。

Build-Jdk 是您计算机上安装的 JDK 版本。

Created-By 是 IDE 中使用的插件名称。

当我们运行项目时,它将在 MANIFEST.MF 文件中查找 Main-Class。如果找不到该条目,它将抛出“Unable to execute jar-file”错误消息。当我们运行上述解决方案时,类条目将自动更新到项目中的 Manifest 文件,如下所示