Java运行jar包时,命令行参数必须放在-jar选项和jar文件路径之后;JVM参数如-Xmx、-D需置于-jar之前;错误地将应用参数放-jar前会导致“找不到主类”错误。

运行 Java 的 jar 包时,命令行参数要**放在 -jar 选项之后、jar 文件路径之后**,且**不能放在 -jar 前面**。这是最容易出错的地方。
标准语法格式
正确的命令结构是:
java -jar your-app.jar arg1 arg2 arg3其中:
-
your-app.jar是可执行 jar 包(含Main-Class的 MANIFEST.MF) -
arg1 arg2 arg3是传给主类main(String[] args)方法的参数,顺序一一对应 - 所有 JVM 启动参数(如
-Xmx、-D)必须写在-jar之前
常见错误写法及后果
❌ 错误:参数写在 -jar 前面
立即学习“Java免费学习笔记(深入)”;
java arg1 arg2 -jar your-app.jar→ JVM 会把 arg1 当作主类名尝试加载,报错:Error: Could not find or load main class arg1
❌ 错误:混用 -cp 和 -jar
→ -jar 会忽略 -cp,classpath 仅以 MANIFEST 中的 Class-Path 为准
传递 JVM 参数和应用参数的组合写法
✅ 正确示例(设置堆内存 + 系统属性 + 应用参数):
java -Xmx512m -Dfile.encoding=UTF-8 -jar myapp.jar --port 8080 --debug说明:
-
-Xmx512m和-Dfile.encoding=UTF-8是 JVM 参数,必须在-jar前 -
--port 8080 --debug是传给main(String[] args)的字符串数组,程序内可解析 - 双横线
--不是 Java 内置语法,而是应用自己约定的“分隔符”,是否支持取决于你的代码逻辑
验证参数是否生效的小技巧
在主类中加一行调试输出,快速确认:
public static void main(String[] args) {System.out.println("Received args: " + Arrays.toString(args));
// ... 其余逻辑
}
运行后控制台直接看到传入的参数内容,避免黑盒猜测。


















