jar运行报错no main manifest attribute

在服务器上运行:

java -jar test-0.0.1-SNAPSHOT.jar

报错:

no main manifest attribute, in test-0.0.1-SNAPSHOT.jar

原因:

原因是找不到主类。

一般情况下,java 打包成 jar 包需要在 MANIFEST.MF 中指定 Main-Class项,以便运行 java -jar xxx.jar 时找到对应的主类。

将test-0.0.1-SNAPSHOT.jar解压后

在这里插入图片描述

查看META-INF下的MANIFEST.MF

在这里插入图片描述
在这里插入图片描述
而正常的应该是这样的:

在这里插入图片描述

解决:

1.检查 maven 项目中的 pom.xml 中有没有缺少如下配置,缺少的话加上

<packaging>jar</packaging>

2.在 pom.xml 中的 build 标签下的 plugins 标签下加入如下打包插件配置

            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.6.0</version>
                <configuration>
                    <mainClass>com.xtool.manager.MainDemo</mainClass>
                    <finalName>XTool</finalName>
					 <includes>
                            <include>
                                <groupId>nothing</groupId>
                                <artifactId>nothing</artifactId>
                            </include>
                     </includes>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

说明:

  • mainClass 标签里是你的项目的启动类的包路径,如果你的项目没有有启动类也不需要通过 java -jar 运行的话可以删除 mainClass
  • finalName 标签里的就是打出来的 jar 名,我这里是 XTool ,最终生成的就是 XTool.jar 。若不使用 finalName 指定,则打包生成的 jar 包名默认使用 pom.xml 文件里 artifactId 标签和 version 标签里的值作为 jar 的名。
  • 如果你希望最终生成的 jar 包不包含第三方依赖那直接用上面的插件配置即可。如果希望最终生成的 jar 包里包含第三方依赖那就删除 includes 标签及其里面的内容

3.在 idea 右边侧边栏的 Maven 选项卡里点击 Lifecyle 下的 package 就可以开始打包了

在这里插入图片描述

最终生成的 jar 包就在 target 目录下

在这里插入图片描述

如果使用这种打包方式问题任然存在,可以尝试使用 idea 来打包,可参考我另一篇文章:idea 项目代码打包为jar包详解

阿里云上的Spring Boot项目打包成JAR文件后,如果运行时报"no main manifest attribute"错误,通常意味着JAR文件缺少`Main-Class`属性,这是Java程序作为可执行jar必需的一个元数据,用于指定主类(包含`main()`方法的那个类)。解决这个问题,你可以按照以下步骤操作: 1. **检查`pom.xml`**:确保你的`pom.xml`中有正确的`<mainClass>`标签,指向你的主启动类,如: ```xml <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>com.example.YourMainClass</mainClass> </configuration> </plugin> </plugins> </build> ``` 将`YourMainClass`替换为你实际项目的主启动类名。 2. **添加Maven插件配置**:如果这个配置存在但仍出现问题,可能是maven插件的问题,可以尝试添加`manifest-file`配置来明确指定manifest文件位置,如: ```xml <build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> <includes> <include>META-INF/MANIFEST.MF</include> </includes> </resource> </resources> <!-- ... --> </build> ``` 3. **手动创建MANIFEST.MF**:如果以上都没有问题,你可以尝试手动创建一个`META-INF/MANIFEST.MF`文件,并添加`Main-Class`属性: ```text Main-Class: com.example.YourMainClass ``` 4. **清理并重新构建**:最后,确保清理目标目录(`mvn clean`),然后重新构建项目(`mvn package`),生成的JAR应该会包含正确的元数据。 如果你已经做了上述步骤还是遇到问题,确认一下是否有其他资源或配置冲突,或者检查你的构建过程是否完整。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值