Maven打包JAR运行报错:找不到或无法加载主类,及NetBeans中Manifest文件位置咨询
问题排查与解决方案
我来帮你一步步解决遇到的JAR执行问题,同时告诉你NetBeans里Manifest文件的位置:
一、解决「Could not find or load main class」错误
1. 先确认主类路径完全正确
首先要核对你的主类com.mycompany.mavenproject3.SSBStub是不是真的存在:
- 检查源码目录
src/main/java下有没有对应的包结构:com/mycompany/mavenproject3,而且SSBStub.java文件里的包声明必须是package com.mycompany.mavenproject3;,同时类里一定要有public static void main(String[] args)方法——这是可执行JAR的核心入口。
2. 检查Maven打包出来的Manifest内容
你可以把生成的JAR文件(比如target/mavenproject3-1.0-SNAPSHOT.jar)解压,看看里面META-INF/MANIFEST.MF文件有没有正确的Main-Class条目:
Main-Class: com.mycompany.mavenproject3.SSBStub
如果这个条目丢了或者路径写错,肯定会报找不到主类的错误。
3. 解决依赖缺失的隐性问题
你的项目依赖了wiremock-standalone,但默认的maven-jar-plugin只会打包你自己写的代码,不会把依赖的第三方JAR包也塞进去。运行时如果找不到WireMock的类,也会间接导致主类加载失败(因为你的主类大概率依赖这些类)。
推荐改用maven-shade-plugin来打包一个包含所有依赖的「胖JAR」,把你的pom.xml里的build部分改成这样:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.2.4</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>com.mycompany.mavenproject3.SSBStub</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build>
改完之后重新执行mvn clean package,然后用target目录下带-shaded后缀的JAR文件运行试试。
4. 确保运行命令正确
最后检查一下你运行JAR的命令是不是对的:
# 用原插件打包的JAR(不包含依赖,可能还是会错) java -jar target/mavenproject3-1.0-SNAPSHOT.jar # 用shade插件打包的胖JAR java -jar target/mavenproject3-1.0-SNAPSHOT-shaded.jar
二、NetBeans中查找Manifest文件的位置
Manifest文件分两种情况:
- 编译前的自定义模板:如果你想自己写Manifest内容,可以在项目的
src/main/resources/META-INF目录下创建MANIFEST.MF(如果目录不存在就手动建)。不过要注意,Maven的打包插件默认会覆盖这个文件,除非你在插件配置里指定使用自定义的Manifest。 - 编译后的最终Manifest:打包完成后,JAR文件内部的
META-INF/MANIFEST.MF,你可以直接在NetBeans里找到target目录下的JAR文件,双击展开,然后点开META-INF节点就能看到这个文件了。
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

