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

无需Gradle/Maven,如何通过CMD传递JAR依赖运行Java程序?

命令行运行带JAR依赖的Java程序解决方案

项目结构前提

假设你的项目目录结构如下(确保依赖JAR都存放在lib目录,源码文件在src目录):

项目根目录/
├── lib/
│   ├── gson-2.10.jar
│   ├── okhttp-3.4.1.jar
│   ├── okio-3.2.0.jar
│   ├── slf4j-api-2.0.6.jar
└── src/
    └── Main.java  # 主类必须包含public static void main(String[] args)方法

一、编译代码(兼容所有Java版本)

你的命令错误原因

你之前使用javac -classpath lib/*.jar -sourcepath src/*报错,核心问题:

  • 类Unix系统(Linux/macOS)的Shell会自动将lib/*.jar展开为多个独立文件名,javac会把这些文件名识别为无效编译参数,触发invalid flag错误。
  • Java的classpath通配符语法是lib/*(代表lib目录下所有JAR文件),而非lib/*.jar。

正确编译命令

类Unix系统(Linux/macOS)

先进入项目根目录,执行以下命令:

javac -cp "lib/*" -d bin src/*.java
  • -cp "lib/*":用引号包裹通配符,避免Shell自动展开,让javac自行解析所有依赖JAR。
  • -d bin:指定编译后的class文件输出到bin目录(目录不存在时javac会自动创建)。
  • 如果主类在子包(如src/com/example/Main.java),命令调整为:
javac -cp "lib/*" -d bin src/com/example/Main.java

Windows系统(CMD)

javac -cp lib\* -d bin src\*.java

Windows CMD不会自动展开通配符,javac会直接解析lib\*。

二、运行程序

你的命令错误原因

  1. java -cp lib/* -sourcepath src/*报错:Shell展开lib/*为多个JAR文件名,java命令误将第一个JAR当作主类名,导致找不到主类;且-sourcepath是javac专属参数,java命令不需要。
  2. java -cp ... src/Main.java报错:若直接运行源码(仅Java 11+支持),需确保类路径包含依赖,同时主类的包结构与文件路径完全匹配。

正确运行命令

方式1:运行编译后的class文件(推荐,兼容所有Java版本)

假设主类无包结构,编译后的class文件在bin目录:

  • 类Unix系统:
java -cp "bin:lib/*" Main
  • Windows系统(用;作为类路径分隔符):
java -cp "bin;lib\*" Main

如果主类有包(如com.example.Main),命令调整为:

java -cp "bin:lib/*" com.example.Main

方式2:Java 11+直接运行源码文件

  • 类Unix系统:
java -cp "lib/*" src/Main.java
  • 若主类在子包,进入项目根目录后运行:
java -cp "lib/*" src/com/example/Main.java

三、关键注意事项

  • 类路径分隔符:类Unix系统用:,Windows系统用;,不要混淆。
  • 通配符必须写lib/*,不能写成lib/*.jar,否则会触发Shell自动展开导致错误。
  • 务必确保主类包含public static void main(String[] args)入口方法。
  • 编译时一定要用-d指定输出目录,避免class文件与源码混杂引发运行问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 16:25:19