Java 21环境下Maven构建Jar包后无法运行,提示找不到或无法加载主类
老兄,我来帮你排查这个新手常踩的坑!你提到用Maven构建Jar后运行报错,结合你给出的错误信息和MANIFEST配置,我们一步步来解决:
首先看你的报错内容:
Error: Could not find or load main class SimpleProj.jar
Caused by: java.lang.ClassNotFoundException: SimpleProj.jar
这里第一个大概率的问题是你用错了运行命令!很多刚接触的同学会直接敲 java SimpleProj.jar,但Java运行Jar包必须加 -jar 参数,正确的命令应该是:
java -jar SimpleProj.jar
如果少了 -jar,Java会把整个Jar文件名当成主类名去查找,自然就找不到了,先试试把命令改对,说不定问题直接就解决了!
要是改完命令还是报错,那就要看你MANIFEST.MF里的主类配置了:
Manifest-Version: 1.0
Created-By: Maven JAR Plugin 3.4.1
Build-Jdk-Spec: 21
Main-Class: main.java.AppMain
这里的 main.java.AppMain 肯定有问题!Maven的 src/main/java 是源码存放目录,这个目录本身不属于包名的一部分。你得打开你的 AppMain.java 文件,看开头的 package 声明:
- 比如如果你的
AppMain.java放在src/main/java/main/目录下,文件开头是package main;,那正确的Main-Class应该是main.AppMain - 要是你的类在
src/main/java/com/myproj/下,开头是package com.myproj;,那Main-Class就是com.myproj.AppMain
如果你怕Maven自动生成的MANIFEST出问题,还可以在pom.xml里手动指定主类,这样更稳妥。在pom.xml的 <build> 节点下添加Jar插件的配置:
<plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.4.1</version> <configuration> <archive> <manifest> <!-- 这里替换成你正确的主类全限定名 --> <mainClass>main.AppMain</mainClass> </manifest> </archive> </configuration> </plugin> </plugins>
配置完后,执行 mvn clean package 重新打包,再用正确的 java -jar 命令运行,应该就能正常启动了。
备注:内容来源于stack exchange,提问作者jbinbama

