执行java -jar命令时出现找不到主类test.Class1的错误求助
解决"Could not find or load main class test.Class1"的问题
我来帮你排查这个报错,你遇到的manifest error, Error: Could not find or load main class test.Class1主要是几个操作误区导致的,咱们一步步拆解解决:
1. 你用的执行命令完全不对
java -jar jarName.jar Class1.java是错误的命令组合,这里有两个核心问题:
java -jar是用来直接运行可执行JAR包的,此时不需要指定任何.java源文件——JAR包里应该已经包含编译好的class文件,并且提前配置了主类信息。- 如果你想直接运行单个编译后的class文件,应该切换到class文件的根目录(也就是
test目录的父目录),执行java test.Class1,而不是带-jar参数再加源文件。
2. 可执行JAR包的两个必要条件
要让JAR包能通过java -jar正常运行,必须满足两个核心要求:
- JAR包内的目录结构要和你的包结构一致:必须有
test目录,里面存放Class1.class、Class2.class等编译后的文件(不是.java源文件)。 - JAR包的
META-INF/MANIFEST.MF文件中,必须明确指定主类的全限定名,也就是要包含这一行:Main-Class: test.Class1
3. 正确的操作步骤(从头走一遍)
假设你的所有.java文件都放在test目录下,当前工作目录是test的父目录,按以下步骤操作:
第一步:编译源文件
执行编译命令,生成对应的class文件:
javac test/*.java
执行后test目录下会出现Class1.class、Class2.class等文件。
第二步:创建MANIFEST.MF配置文件
在当前工作目录下新建一个文本文件,命名为MANIFEST.MF,内容如下:
Main-Class: test.Class1
⚠️ 重要提醒:文件的最后一行必须是空行,否则JAR工具会无法正确识别这个配置。
第三步:打包成可执行JAR
执行打包命令,把class文件和MANIFEST配置一起打包:
jar cvfm jarName.jar MANIFEST.MF test/*.class
第四步:运行JAR包
现在就可以用正确的命令运行了:
java -jar jarName.jar
4. 额外注意事项
- 不要把.java源文件打包到JAR里,JAR包只需要编译后的.class文件。
- 主类名必须写全限定名(包名+类名),不能只写
Class1,否则JVM找不到对应的类。
内容的提问来源于stack exchange,提问作者Devendra Sahu
相关产品推荐
相关产品推荐

