修复 Spring no main manifest 属性
概述
每当我们在 Spring Boot 可执行 jar 中遇到*“no main manifest 属性”*消息时,都是因为我们缺少文件 MANIFEST 中 Main-Class 元数据属性的声明*。MF,位于 *META-INF 文件夹下。
在这个简短的教程中,我们将介绍问题的原因以及如何解决它。
2. 问题发生时
一般来说,如果我们从Spring Initializr中获取我们的*pom*,我们不会有任何问题。但是,如果我们通过将 spring-boot-starter-parent 添加到我们的 pom.xml 来手动构建我们的项目,我们可能会遇到这个问题。我们可以通过尝试 jar 的干净构建来复制它:
$ mvn clean package
运行 jar 时会遇到错误:
$ java -jar target\spring-boot-artifacts-2.jar
no main manifest attribute, in target\spring-boot-artifacts-2.jar
在此示例中,清单的内容。MF 文件是:
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven 3.6.3
Built-By: Baeldung
Build-Jdk: 11.0.13
3. 使用 Maven 插件修复
3.1. 添加插件
在这种情况下,最常见的问题是我们错过了将 spring-boot-maven-plugin 声明添加到我们的 pom.xml 文件中。
让我们将插件定义添加到我们的pom中.xml在插件标签下使用Main-Class声明:
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.baeldung.demo.DemoApplication</mainClass>
<layout>JAR</layout>
</configuration>
</plugin>
</plugins>
但是,这可能不足以解决我们的问题。重建并运行我们的 jar 后,我们可能仍然会收到*“无主清单属性”*消息。
让我们看看我们有什么额外的配置和替代方案来解决这个问题。
3.2. Maven插件执行目标
让我们将重新打包*目标添加到 *spring-boot-maven-plugin 声明中,紧跟在配置标记之后:
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
3.3. Maven 属性和内联命令执行目标
或者,将属性 start-class 添加到我们的 pom.xml 文件的属性标签中,可以在构建过程中获得更大的灵活性:
<properties>
<start-class>com.baeldung.demo.DemoApplication</start-class>
</properties>
现在,我们必须使用 Maven 内联命令 spring-boot:repackage 执行目标来构建 jar:
$ mvn package spring-boot:repackage
4. 检查清单。MF 文件内容
让我们应用我们的解决方案,构建 jar,然后检查清单。MF 文件。
我们注意到主类和起始类属性的存在:
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven 3.6.3
Built-By: Baeldung
Build-Jdk: 11.0.13
Main-Class: org.springframework.boot.loader.JarLauncher
Start-Class: com.baeldung.demo.DemoApplication
Spring-Boot-Version: 2.7.5
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Spring-Boot-Classpath-Index: BOOT-INF/classpath.idx
Spring-Boot-Layers-Index: BOOT-INF/layers.idx
现在执行 jar,*“无主清单属性”*消息问题不再显示,并且应用程序运行。
5. 结论
在本文中,我们看到了如何在执行 Spring Boot 可执行 jar 时解决*“无主清单属性”*消息。
我们看到了如何从手动创建的pom.xml文件中获得这一点,以及如何添加和配置Spring Maven插件来修复它。
与往常一样,示例代码可在 GitHub 上找到。