使用Maven后,用命令行运行jar文件出现no main manifest attribute, in *.jar

本文解决IntelliJ IDEA中Maven项目生成的jar文件无法运行的问题,原因是MANIFEST.MF文件被错误地放置在src/main/java目录下,而非src/main/resources。通过调整文件位置,成功使jar文件正常运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天用Intelij IDEA把原来的Java项目迁移为Maven项目,一切都很顺利,项目能自动引入Maven类库,确实方便很多。

在运行生成的jar文件时出现no main manifest attribute, in *.jar。我已经在Project Structure里面设置了Main class,但是就是运行不了,在之前的Java项目了就没有这个问题。

我注意到在build artifact后,生成了一个MANIFEST.MF文件在src/main/java目录里。在我把Java项目迁移为Maven项目后,项目多了个resources目录,原来这是Intellij IDEA的疏忽,当把项目设置为Maven模板时,Intellij IDEA把生成的MANIFEST.MF文件放到错误的目录里,所以导致生成的jar文件无法找到manifest attribute,MANIFEST.MF属于resources类的文件应该把MANIFEST.MF所在的META-INF文件夹从src/main/java目录移动到src/main/resources目录里。这样再次生成的jar文件就可以运行了。

参考链接https://stackoverflow.com/questions/20952713/wrong-manifest-mf-in-intellij-idea-created-jar/21074091#21074091

<think>我们正在解决用户的问题:如何修复运行JAR文件时出现的“no main manifest attribute, in ...jar”错误。 这个错误通常是因为JAR文件MANIFEST.MF文件中缺少Main-Class属性,导致Java运行时无法知道应该从哪个类的main方法开始执行。 根据用户提供的引用[1]中出现的错误信息,我们可以确认这正是用户遇到的问题。 解决方案通常有两种: 1. 在构建JAR文件时,确保在MANIFEST.MF文件中指定Main-Class属性。 2.运行JAR文件时,通过命令行参数指定主类(但这种方式需要JAR文件中的类路径配置正确,且不是所有情况都适用,通常推荐第一种方法)。 下面我们将详细说明如何解决: 方法一:使用Maven构建时配置MANIFEST.MF(如果用户使用Maven) 在pom.xml文件中配置maven-jar-pluginmaven-assembly-plugin或spring-boot-maven-plugin(如果是Spring Boot项目)来指定主类。 例如,对于普通Java项目,在pom.xml中添加: ```xml <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.2.0</version> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <mainClass>com.example.MainClass</mainClass> <!-- 替换为实际主类 --> </manifest> </archive> </configuration> </plugin> </plugins> </build> ``` 对于Spring Boot项目,通常使用spring-boot-maven-plugin,它会自动配置主类。但有时可能需要指定: ```xml <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.5.0</version> <!-- 使用实际版本 --> <configuration> <mainClass>com.example.MainClass</mainClass> <!-- 替换为实际主类 --> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build> ``` 然后重新构建项目(运行mvn clean package)。 方法二:手动更新已有JAR文件MANIFEST.MF 如果已经有一个JAR文件,可以更新其MANIFEST.MF文件: 1. 解压JAR文件JAR文件本质上是ZIP文件): ```bash mkdir temp cd temp jar xf ../yourjar.jar ``` 2. 编辑META-INF/MANIFEST.MF文件,在文件中添加一行(如果已有Main-Class则修改): ``` Main-Class: com.example.MainClass ``` 注意:冒号后面有一个空格,最后需要有一个空行。 3. 重新打包JAR文件: ```bash jar cfm ../newjar.jar META-INF/MANIFEST.MF . ``` 方法三:在运行命令中指定主类(不修改JAR) 可以使用以下命令运行(但要求JAR文件中的类都在类路径上,且主类在JAR中): ```bash java -cp yourjar.jar com.example.MainClass ``` 但这种方法每次运行都需要输入主类全名,且如果JAR文件依赖其他库则还需要指定类路径,所以不推荐作为最终解决方案。 方法四:使用Spring Boot Maven插件构建可执行JAR 如果是Spring Boot项目,确保使用spring-boot-maven-plugin进行打包,它会生成一个可执行的JAR,其中包含了主类信息。 根据引用[4]中的链接,我们可以知道用户可能遇到了类路径问题,但当前错误是主清单属性缺失,所以重点在配置主类。 因此,我们推荐用户根据他们的项目构建工具(如Maven)进行配置,重新生成JAR文件。 注意:如果用户使用其他构建工具(如Gradle),配置方式类似,需在build.gradle中指定主类。 例如,在Gradle中: ```groovy jar { manifest { attributes 'Main-Class': 'com.example.MainClass' } } ``` 或者对于Spring Boot项目,使用bootJar任务(由spring boot gradle插件提供)。 综上所述,我们提供了多种解决方案,用户可以根据自己的项目情况选择合适的方法。 下面生成相关问题:</think>### 修复 "no main manifest attribute" JAR 文件错误 当运行 JAR 文件时出现 `no main manifest attribute` 错误,表示 JAR 的 `MANIFEST.MF` 文件缺少 `Main-Class` 属性,导致 Java 无法确定程序入口点。以下是完整解决方案: #### 解决方案 1:通过 Maven 配置(推荐) 在 `pom.xml` 中添加 `maven-jar-plugin` 并指定主类: ```xml <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.3.0</version> <configuration> <archive> <manifest> <mainClass>com.example.YourMainClass</mainClass> <!-- 替换实际主类 --> </manifest> </archive> </configuration> </plugin> </plugins> </build> ``` 重新构建项目: ```bash mvn clean package ``` #### 解决方案 2:通过 Spring Boot 插件 对于 Spring Boot 项目,在 `pom.xml` 中添加: ```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> ``` 重新打包: ```bash mvn spring-boot:repackage ``` #### 解决方案 3:手动修复现有 JAR 1. 解压 JAR: ```bash mkdir temp && unzip your.jar -d temp ``` 2. 编辑 `META-INF/MANIFEST.MF`,添加: ```manifest Main-Class: com.example.YourMainClass ``` **注意**:末尾需保留两个换行符 3. 重新打包: ```bash cd temp && jar cfm ../fixed.jar META-INF/MANIFEST.MF * ``` #### 解决方案 4:命令行指定主类(临时方案) ```bash java -cp your.jar com.example.YourMainClass ``` ### 错误原因分析 此错误通常发生在: 1. 未在构建配置中声明主类 2. 使用 `mvn package` 而非 `mvn spring-boot:repackage` 3. MANIFEST.MF 文件格式错误(如缺少换行符) 4. 第三方库打包时遗漏主类配置[^1] ### 验证修复 成功修复后,运行 JAR 应显示: ```bash $ java -jar fixed.jar Spring Boot application started... # 或您的应用启动日志 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值