用java -jar 运行spring boot jar包报没有主清单属性的解决

本文介绍如何在SpringBoot项目中使用Maven插件指定主类,以便生成可以直接运行的Jar包。通过这种方式,可以避免因缺少Main-Class属性而导致无法直接运行的问题。

在开发完spring boot 项目之后,我们需要把它称jar包,然后在命令行输入java -jar ,但在这时却弹出没有主清单属性

 打开生成的jar,里面有一个MANIFEST.MF的文件把它打开:

发型并没有 Main-Class执行主类这个配置;

一种解决办法就是手动添加Main-Class 文件

然后重新运行即可;

 怎么才能打个直接可以运行的jar呢?使用maven插件指定主类

         注意!!!当工程使用parent工程统一管理jar包,其他子项目依赖你的父工程时要添加repackage这个目标;我们在<executions>标签里配置的<goal>repackage</goal>对应spring-boot:repackage这个目标,打包时排除resources下的资源文件 

简单点说,就是创建一个自动可执行的jar或war文件。它可以替换常规的artifact,或者用一个单独的classifier附属在maven构建的生命周期中。一般情况,这个目标会打一个新的jar/war,并把maven默认打的jar/war添加.original后缀,在target目录下可以看到:

 

这时打开jar包查看 MANIFEST.MF的文件,即可看到Main-Class属性

运行 Spring BootJAR 时,如果出现“没有主清单属性”的错误,通常是由于 JAR 的 `MANIFEST.MF` 文件中没有正确指定 `Main-Class` 属性,导致 Java 无法找到程序入口点。Spring Boot 通过 `spring-boot-maven-plugin` 插件自动处理主类配置,但在某些情况下仍需手动干预。 ### 解决方案 1. **确保正确配置 `spring-boot-maven-plugin` 插件** 在 `pom.xml` 文件中添加或检查 `spring-boot-maven-plugin` 插件配置,确保其正确含在 `<build>` 部分中: ```xml <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build> ``` 该插件负责将依赖打进最终的 JAR 文件,并正确设置 `Main-Class` 属性,确保 JAR 文件可执行[^3]。 2. **手动指定主类(可选)** 如果项目中存在多个主类,或者插件未能自动识别正确的入口类,可以在插件配置中手动指定 `<mainClass>`: ```xml <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>com.example.MainApplication</mainClass> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> ``` 这样可以确保生成的 JAR 中 `MANIFEST.MF` 文件含正确的 `Main-Class` 属性,指向应用程序的主类[^5]。 3. **执行 Maven 构建命令** 在修改完 `pom.xml` 后,执行以下 Maven 命令重新构建项目: ```shell mvn clean install ``` 该命令会清理旧的构建文件、重新编译代码并打生成可执行的 JAR 文件。生成的 JAR 文件通常位于 `target/` 目录下。 4. **运行 JAR 文件** 确保 JAR 文件正确生成后,使用以下命令运行: ```shell java -jar your-application.jar ``` 如果仍然遇到问题,可以使用 `jar` 命令查看 `MANIFEST.MF` 文件内容: ```shell jar xf your-application.jar META-INF/MANIFEST.MF cat META-INF/MANIFEST.MF ``` 检查输出中是否含类似以下内容: ``` Main-Class: com.example.MainApplication ``` 如果缺失该属性,说明插件配置未生效,需重新检查 `pom.xml` 配置[^1]。 ### 相关问题 1. Spring Boot 项目中如何确认 `Main-Class` 是否正确设置? 2. 打后的 JAR 文件无法运行,提示“找不到或无法加载主类”该如何解决? 3. 使用 Maven 构建 Spring Boot 项目时,如何确保依赖被正确打JAR 文件? 4. 为什么在 IDE 中运行 Spring Boot 项目正常,但打JAR 后却错? 5. Spring Boot 的 `spring-boot-maven-plugin` 插件有哪些常用配置项?
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值