java 命令
在 Linux 中,所有 Java 程序的执行都依赖于 java 这个命令,它属于 Java Development Kit (JDK) 或 Java Runtime Environment (JRE),在执行命令之前,请确保你的系统已经正确安装了 Java 并且环境变量 PATH 已经配置好。

你可以通过以下命令检查 Java 是否已安装以及其版本:
java -version
如果看到类似下面的输出,说明 Java 已经安装成功:
openjdk version "11.0.16" 2025-07-19
OpenJDK Runtime Environment Temurin-11.0.16+8 (build 11.0.16+8)
OpenJDK 64-Bit Server VM Temurin-11.0.16+8 (build 11.0.16+8, mixed mode, sharing)
运行最简单的 Java 程序(单个 .class 文件)
假设你有一个编译好的 Java 类 HelloWorld.class,它包含一个 public static void main(String[] args) 方法。
命令格式:

java [选项] <类名>
示例:
假设你的 HelloWorld.class 文件位于当前目录下。
# 确保文件存在 ls HelloWorld.class # 执行 Java 程序 java HelloWorld
⚠️ 重要注意点:
- 命令中的
<类名>是类的全限定名,com.example.MyApp,并且不需要加上.class后缀。 - 如果你的类在包(package)中,必须使用完整的包路径来运行。
示例(带包的类): 假设你的文件结构如下:
com/
└── example/
└── MyApp.class
并且你在 com/ 的父目录(即 example/ 的上一级目录)下执行命令。

# 进入 com 的父目录 cd /path/to/your/project # 执行时需要指定完整的包路径 java com.example.MyApp
运行需要 JAR 包的 Java 程序
大多数复杂的 Java 应用程序都会被打包成一个 JAR (Java Archive) 文件。
可执行 JAR(带 Main-Class 清单)
这是最常见的情况,JAR 文件的 META-INF/MANIFEST.MF 文件中已经指定了程序的入口点(Main-Class)。
命令格式:
java [选项] -jar <jar文件名>
示例:
假设你的程序被打包成了 my-app.jar。
java -jar my-app.jar
普通 JAR(需要手动指定主类)
有些 JAR 文件只是库,或者虽然是可执行 JAR但你想临时覆盖其 Main-Class。
命令格式:
java [选项] -cp <jar文件路径> <类名>
或者使用更现代的 -classpath:
java [选项] -classpath <jar文件路径> <类名>
示例:
假设你的主类是 com.example.Main,它依赖一个名为 library.jar 的库。
java -cp library.jar com.example.Main
处理多个依赖(类路径 Classpath)
当你的程序需要多个 JAR 包或多个目录下的 .class 文件时,你需要正确设置类路径(Classpath)。
使用 -cp 或 -classpath
-cp 是 -classpath 的缩写,用于指定查找 .class 文件和资源文件的路径列表。路径之间用冒号 分隔(这是 Linux 和 macOS 的分隔符,Windows 上是分号 )。
命令格式:
java [选项] -cp "<路径1>:<路径2>:<路径3>" <类名>
示例: 假设你的项目结构如下:
project/
├── bin/ # 存放编译后的 .class 文件
│ └── com/
│ └── example/
│ └── Main.class
├── lib/ # 存放依赖的 JAR 包
│ ├── spring-core.jar
│ └── log4j.jar
└── my-app.jar # 你自己的程序 JAR
你可以在 project/ 目录下执行以下命令:
# 指定 bin 目录和 lib 目录下的所有 JAR java -cp "bin:lib/*" com.example.Main # 或者明确列出所有 JAR java -cp "bin:lib/spring-core.jar:lib/log4j.jar" com.example.Main
lib/* 是一个通配符,表示 lib 目录下的所有文件,非常方便。
使用 CLASSPATH 环境变量
你也可以设置一个全局或临时的 CLASSPATH 环境变量,如果设置了 CLASSPATH,并且没有使用 -cp 或 -jar,Java 就会使用这个环境变量。
临时设置(仅对当前命令有效):
export CLASSPATH="bin:lib/*" java com.example.Main
永久设置(不推荐,容易导致混乱):
通常不建议在 .bashrc 或 .profile 中设置全局的 CLASSPATH,因为它可能会干扰其他 Java 程序的运行。
高级选项:内存管理、调试等
java 命令提供了丰富的选项来控制程序的运行行为。
内存管理(JVM 参数)
这是最常见的用法,用于调整堆内存大小。
-Xms: 设置 JVM 初始化堆内存大小。-Xmx: 设置 JVM 最大堆内存大小。
示例: 为一个应用分配 1GB 的初始堆内存和 4GB 的最大堆内存。
java -Xms1g -Xmx4g -jar my-big-app.jar
调试选项
-verbose:gc: 在控制台打印详细的垃圾回收信息。java -verbose:gc -jar my-app.jar
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005: 启用远程调试,允许 IDE(如 IntelliJ IDEA, Eclipse)连接到正在运行的 Java 应用。java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 -jar my-app.jar
其他常用选项
-D<name>=<value>: 设置一个系统属性,Java 代码可以通过System.getProperty("name")来读取它。java -Dconfig.path=/etc/my-app/config.properties -jar my-app.jar
-server: 使用服务器模式的 JVM,通常有更好的性能优化(在大多数现代 JDK 中,这是默认模式)。-client: 使用客户端模式的 JVM(较少使用)。
现代 Java 项目构建工具(Maven/Gradle)
在实际开发中,你几乎不会直接手动编译和运行 Java 代码,而是使用像 Maven 或 Gradle 这样的构建工具,它们会自动处理编译、依赖管理、打包和运行的一切。
使用 Maven
在包含 pom.xml 文件的目录下:
- 编译项目:
mvn compile
- 运行主类(不打包):
mvn exec:java -Dexec.mainClass="com.example.Main"
- 打包并运行:
mvn package java -jar target/your-app-name.jar # JAR 文件通常在 target 目录下
使用 Gradle
在包含 build.gradle 或 build.gradle.kts 文件的目录下:
- 编译项目:
gradle build
- 运行主类(不打包):
gradle run -PmainClass="com.example.Main"
- 打包并运行:
gradle build java -jar build/libs/your-app-name.jar # JAR 文件通常在 build/libs 目录下
| 场景 | 命令格式 | 示例 |
|---|---|---|
运行单个 .class |
java <类名> |
java HelloWorld |
| 运行可执行 JAR | java -jar <jar文件> |
java -jar my-app.jar |
| 运行带依赖的类 | java -cp "<路径>" <类名> |
java -cp "bin:lib/*" com.example.Main |
| 设置内存 | java -Xms... -Xmx... [其他选项] |
java -Xms1g -Xmx4g -jar my-app.jar |
| 调试模式 | java -agentlib:jdwp=... [其他选项] |
java -agentlib:jdwp=... -jar my-app.jar |
| 使用 Maven | mvn [目标] |
mvn compile, mvn exec:java |
| 使用 Gradle | gradle [任务] |
gradle build, gradle run |
掌握这些命令是 Linux 环境下进行 Java 开发和运维的基础,对于日常开发,强烈建议学习和使用 Maven 或 Gradle,它们能极大地简化你的工作。
