在 Linux 环境下运行 Java 程序,核心流程围绕环境准备、代码编译、执行启动三个环节展开。以下是基于生产环境最佳实践的操作指南:
1. 环境准备与验证
Java 程序运行依赖 JVM(Java 虚拟机)。首先需确认系统已安装 JDK(Java Development Kit)或 JRE(Java Runtime Environment)。对于生产环境,通常推荐安装 JDK 以支持调试和版本管理。
使用以下命令检查版本:
java -version
javac -version
若提示 command not found,说明未配置环境变量。国内主流云厂商(如阿里云 ECS、腾讯云 CVM)的镜像通常预装了 OpenJDK,但建议手动指定路径以确保版本可控。
配置环境变量示例(以 /opt/java/jdk-17 为例):
编辑 ~/.bashrc 或 /etc/profile:
export JAVA_HOME=/opt/java/jdk-17
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
source ~/.bashrc
注:现代 JDK(8u20+)及 JDK 9+ 后,CLASSPATH 通常不再需要显式配置,重点在于 JAVA_HOME 和 PATH。
2. 代码编译(针对 .java 源码)
如果手头是 .java 源代码文件,必须先通过 javac 编译器生成字节码文件(.class)。
# 编译当前目录下的 Main.java
javac Main.java
# 输出到特定目录(推荐做法,便于管理)
javac -d ./target/classes src/com/example/Main.java
编译成功后,会生成对应的 .class 文件。若项目结构复杂(包含多个包),建议使用构建工具如 Maven 或 Gradle 进行统一编译打包,避免手动处理类路径问题。
3. 程序执行
使用 java 命令加载 JVM 并执行主类。注意:命令中只需写类名,不要加 .class 后缀,且需确保当前工作目录在 Classpath 中。
基础运行:
java com.example.Main
若主类在当前目录:
java Main
带参数运行:
java -Duser.timezone=Asia/Shanghai com.example.Main arg1 arg2
4. 生产环境优化建议
在实际部署中,直接在前台运行 java Main 会导致进程随终端关闭而终止,因此需采用后台守护方式:
-
使用 nohup 或 screen/tmux:
nohup java -Xms512m -Xmx2g com.example.Main > app.log 2>&1 &-Xms/-Xmx:设置堆内存初始值和最大值,防止 OOM。> app.log 2>&1:将标准输出和错误输出重定向到日志文件。
-
使用 Systemd 管理(推荐):
创建/etc/systemd/system/myapp.service,实现开机自启、崩溃自动重启等能力。这是云原生环境下的标准运维方式。 -
容器化部署:
现代架构常将 Java 应用打包为 Docker 镜像,利用 Kubernetes 编排。此时 Linux 宿主机无需安装 JDK,由容器内隔离环境提供运行支撑。
5. 常见问题排查
- ClassNotFound:检查
java命令是否指定了正确的包名(含包路径),或 Classpath 是否缺失依赖库。 - 端口占用:若 Web 应用无法启动,使用
netstat -tlnp | grep <端口>排查冲突。 - 权限问题:确保脚本有执行权限 (
chmod +x script.sh),且文件所有者正确。
遵循上述步骤,即可在各类 Linux 发行版(CentOS, Ubuntu, Debian 等)及云服务器环境中稳定运行 Java 应用。
CLOUD云枢