杰瑞科技汇

Linux如何通过命令行调用Java程序?

java 命令

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

Linux如何通过命令行调用Java程序?-图1
(图片来源网络,侵删)

你可以通过以下命令检查 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) 方法。

命令格式:

Linux如何通过命令行调用Java程序?-图2
(图片来源网络,侵删)
java [选项] <类名>

示例: 假设你的 HelloWorld.class 文件位于当前目录下。

# 确保文件存在
ls HelloWorld.class
# 执行 Java 程序
java HelloWorld

⚠️ 重要注意点:

  • 命令中的 <类名>类的全限定名com.example.MyApp,并且不需要加上 .class 后缀。
  • 如果你的类在包(package)中,必须使用完整的包路径来运行。

示例(带包的类): 假设你的文件结构如下:

com/
└── example/
    └── MyApp.class

并且你在 com/ 的父目录(即 example/ 的上一级目录)下执行命令。

Linux如何通过命令行调用Java程序?-图3
(图片来源网络,侵删)
# 进入 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.gradlebuild.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,它们能极大地简化你的工作。

分享:
扫描分享到社交APP
上一篇
下一篇