成功执行 java -jar xxx.jar 的前提是:jre/jdk 已安装且版本兼容,java 命令可用;jar 包为可运行格式,即 manifest.mf 中含正确 main-class 属性;依赖已内置(fat jar)或显式指定;文件有读取权限,路径无空格或中文。

要成功执行 java -jar xxx.jar,核心前提是:该 JAR 包必须是**可运行的(executable)JAR**,即包含正确配置的 META-INF/MANIFEST.MF 文件,并且你的运行环境已满足基本 Java 条件。
Java 运行时环境(JRE/JDK)已安装并可用
这是最基础的前提:
- 系统中需安装与 JAR 包编译版本兼容(或更高)的 Java 版本(如 JAR 用 Java 11 编译,则至少需 Java 11 运行时)
-
java命令必须能被系统识别——检查方式:终端输入java -version能正常输出版本信息 - 无需配置
JAVA_HOME环境变量也能运行,但若依赖某些工具类库(如javac或jdeps),则 JDK 更合适
JAR 包本身是“可运行”的(含 Main-Class 属性)
普通 JAR 包不能直接用 -jar 启动。它必须在 META-INF/MANIFEST.MF 中声明入口类:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- 清单文件中需包含一行:
Main-Class: com.example.Main(类名需为全限定名,不含.class) - 该主类中必须有符合规范的
public static void main(String[] args)方法 - 可通过解压 JAR 或运行
jar -xf xxx.jar META-INF/MANIFEST.MF && cat META-INF/MANIFEST.MF查看是否含此行
依赖项已妥善处理(无 ClassNotFoundException)
java -jar 默认**只加载该 JAR 自身内容**,不会自动引入外部依赖:
- 如果项目用了 Spring Boot、Maven Shade 插件或 Gradle 的
shadowJar,通常会打包成“fat jar”(含所有依赖),可直接运行 - 若为传统普通 JAR(仅自己代码),需手动通过
-cp或Class-Path清单属性指定依赖路径(此时不推荐用-jar,而改用java -cp "xxx.jar:lib/*" com.example.Main) - 常见报错
Exception in thread "main" java.lang.NoClassDefFoundError多因依赖缺失导致
文件权限与路径无误(尤其在 Linux/macOS)
看似简单,却常被忽略:
- JAR 文件需具备读取权限(
chmod +r xxx.jar);在某些系统上还需可执行权限才能双击运行(但java -jar不强制要求) - 确保当前终端位于 JAR 所在目录,或使用绝对/相对路径(如
java -jar ./target/app.jar) - 路径中避免空格或中文(尤其 Windows 下可能触发解析异常,建议用引号包裹路径,如
java -jar "my app.jar")
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










