You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 18.04下Java Artifact生成失败,运行Jar提示主类未找到求助

解决Jar文件提示“主类未找到或未加载”的问题

我太懂这种明明代码写得没问题,打包成Jar就报错的烦躁感了!咱们一步步排查,把问题揪出来:

1. 先检查Manifest文件的格式——这里最容易踩坑

Manifest文件的格式要求特别严格,你现在的内容是把两行写在一行了,而且最后必须加一个空行,否则JVM读的时候会出问题。正确的格式应该是这样:

Manifest-Version: 1.0
Main-Class: Main

注意:Main-Class:后面必须跟一个空格,最后一行要空着,别省这个步骤!

2. 确认编译后的class文件位置,打包时别搞错路径

你说Manifest在src文件夹里,但打包Jar的时候,要包含的是编译好的.class文件,不是.java源文件。给你一套标准的操作步骤:

  • 先编译源文件:javac src/Main.java,这会在src目录下生成Main.class
  • 把Manifest文件放到和class同目录(或者保持在src,但打包时要指定正确路径)
  • 执行打包命令:
    jar cvfm myapp.jar src/manifest.txt src/Main.class
    
    不过更稳妥的是把class文件移到根目录,这样打包时主类路径就是Main,不会出问题:
    mv src/Main.class .
    jar cvfm myapp.jar src/manifest.txt Main.class
    

3. 验证Java环境变量是否真的生效

虽然你配置了/etc/environment和/etc/profile,但有时候终端没加载最新的配置。先在终端里运行这两个命令看看:

echo $JAVA_HOME
echo $PATH

如果输出里没有/usr/lib/jvm/java-8-oracle或者$JAVA_HOME/bin,就运行source /etc/profile刷新一下,或者重启终端再试。

4. 看看Jar包里面到底装了啥

打包完之后,用这个命令查看Jar的内容:

jar tf myapp.jar

正常的输出应该包含这几项:

META-INF/
META-INF/MANIFEST.MF
Main.class

如果看不到Main.class,说明打包时没把它加进去;如果Manifest的路径不对,也要调整打包命令。

5. 先跳过Jar,直接运行class文件排除问题

先别打包,直接运行编译好的class文件:

java Main

如果能正常输出Hello World!,说明你的代码和Java环境都是好的,问题肯定出在打包环节;如果这一步也报错,那就要检查环境变量或者编译是否正确了。

按上面的步骤排查下来,大概率能解决问题——我遇到过好多次都是Manifest格式或者打包路径的问题,仔细核对一下就行!

内容的提问来源于stack exchange,提问作者muelleste

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:26:05