Java工程如何在Linux环境下运行?

在Linux环境下运行Java工程是后端开发中的常见需求,整个过程涉及环境配置、项目编译、依赖管理、程序运行及后台服务管理等多个环节,以下是详细的操作步骤和注意事项,帮助顺利完成Java工程的部署与运行。

java工程如何在linux下运行

环境准备:安装与配置JDK

Java工程的运行依赖于Java Development Kit(JDK),需先确保Linux系统已安装正确版本的JDK,以下是几种常见的安装方式:

使用包管理器安装(推荐新手)

以Ubuntu/Debian系统为例,使用apt命令安装OpenJDK(以JDK 11为例):

sudo apt update
sudo apt install openjdk-11-jdk

安装后验证是否成功:

java -version  # 查看Java版本
javac -version # 查看编译器版本

手动安装JDK(适用于特定版本)

若需安装Oracle JDK或其他未收录在包管理器中的版本,可手动下载安装:
(1)从Oracle官网或Adoptium下载JDK的tar.gz包(如OpenJDK 11的jdk-11.0.13_linux-x64_bin.tar.gz);
(2)将安装包上传至Linux系统(可通过scpwget下载),解压到指定目录(如/usr/local/):

sudo tar -zxvf jdk-11.0.13_linux-x64_bin.tar.gz -C /usr/local/

(3)配置环境变量,编辑/etc/profile或用户家目录下的~/.bashrc文件,添加以下内容:

export JAVA_HOME=/usr/local/jdk-11.0.13
export PATH=$JAVA_HOME/bin:$PATH

(4)使配置生效:

source /etc/profile  # 或 source ~/.bashrc

JDK安装方式对比

安装方式 优点 缺点 适用场景
包管理器安装 简单快速,自动依赖管理 版本可能较旧 开发测试环境,无特殊版本需求
手动安装 可灵活选择版本,适合生产环境 需手动配置环境变量,依赖需自行处理 需要特定JDK版本的生产环境

项目编译与依赖管理

Java工程通常使用构建工具(如Maven或Gradle)管理依赖和编译代码,需先安装对应工具并执行构建。

使用Maven构建

(1)安装Maven(以Ubuntu为例):

sudo apt install maven

(2)进入项目根目录(包含pom.xml文件),执行编译命令:

mvn clean compile  # 编译源代码,生成target目录
mvn package       # 打包为jar包(默认生成jar文件于target/目录下)

若项目包含依赖,Maven会自动下载并管理,无需手动处理jar包路径。

使用Gradle构建

(1)安装Gradle(需先安装JDK,下载二进制包并配置环境变量):

# 下载Gradle(如gradle-7.2-bin.zip),解压到/usr/local/
sudo unzip gradle-7.2-bin.zip -d /usr/local/
# 配置环境变量(~/.bashrc)
export GRADLE_HOME=/usr/local/gradle-7.2
export PATH=$GRADLE_HOME/bin:$PATH
source ~/.bashrc

(2)进入项目根目录(包含build.gradle文件),执行构建:

gradle build  # 编译并打包,生成jar包于build/libs/目录下

普通Java项目(无构建工具)

若项目未使用Maven/Gradle,需手动编译并处理依赖:
(1)编译源代码(假设源码在src/目录,输出到classes/):

mkdir -p classes
javac -d classes src/*.java

(2)运行时需手动指定依赖jar包路径(通过-cp参数):

java -cp "classes:lib/*.jar" com.example.MainClass  # Linux下用冒号分隔路径

运行Java程序

编译完成后,可通过java命令运行程序,根据项目类型选择不同的运行方式。

运行普通jar包

若项目已打包为可执行jar包(包含Main-Class清单),直接运行:

java -jar target/your-app.jar

若jar包未包含依赖(如Maven的jar打包类型),需通过-cp指定依赖路径:

java -cp "target/your-app.jar:lib/*" com.example.MainClass

运行Spring Boot等fat jar

Spring Boot项目通常打包为“fat jar”(包含所有依赖),可直接运行:

java -jar target/spring-boot-app.jar --server.port=8081  # 可附带启动参数

后台运行与日志管理

直接运行java -jar命令时,终端关闭会导致程序终止,需使用后台运行工具:

  • nohup:让程序忽略挂断信号,输出日志到文件
    nohup java -jar your-app.jar > app.log 2>&1 &  # 后台运行,日志输出到app.log
  • screen:创建会话,可断开连接后重新 attach
    screen -S java_app  # 创建新会话
    java -jar your-app.jar  # 在会话中运行程序
    # 按Ctrl+A+D暂时断开会话,后续通过screen -r java_app恢复

后台服务管理(systemd)

生产环境中,通常将Java程序注册为systemd服务,实现开机自启、日志管理、进程监控等功能。

创建服务文件

编辑/etc/systemd/system/java-app.service如下:

[Unit]
Description=Java Application Service
After=network.target
[Service]
User=javauser  # 运行服务的用户(需提前创建)
WorkingDirectory=/path/to/your/app
ExecStart=/usr/bin/java -jar your-app.jar --spring.profiles.active=prod
ExecStop=/bin/kill -15 $MAINPID
SuccessExitStatus=143
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target

启动并管理服务

systemctl daemon-reload  # 重新加载服务配置
systemctl start java-app  # 启动服务
systemctl enable java-app # 开机自启
systemctl status java-app # 查看服务状态
journalctl -u java-app -f # 查看实时日志

常见问题排查

  1. java: command not found:检查JDK是否安装成功,JAVA_HOMEPATH是否正确配置。
  2. Error: Could not find or load main class
    • 检查-cp路径是否正确(Linux下用冒号分隔);
    • 确认包名与类名是否匹配(如com.example.MainClass);
    • 若为jar包,检查META-INF/MANIFEST.MF中的Main-Class是否配置正确。
  3. 内存溢出(OutOfMemoryError:调整JVM参数,如java -Xms512m -Xmx2048m -jar your-app.jar(初始堆512m,最大堆2g)。

相关问答FAQs

Q1: 如何让Java程序在Linux开机时自动启动?
A1: 可通过两种方式实现:
(1)使用nohup结合&后台运行,并添加到/etc/rc.local文件(需赋予执行权限chmod +x /etc/rc.local);
(2)推荐使用systemd服务(如上文所述),通过systemctl enable设置开机自启,更适合生产环境,支持依赖管理和进程监控。

Q2: 运行jar包时提示“no main manifest attribute”,如何解决?
A2: 该错误通常表示jar包未正确配置Main-Class入口点,解决方法:
(1)若使用Maven,检查pom.xml中是否添加maven-jar-plugin并配置Main-Class

   <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-jar-plugin</artifactId>
       <version>3.2.0</version>
       <configuration>
           <archive>
               <manifest>
                   <mainClass>com.example.MainClass</mainClass>
               </manifest>
           </archive>
       </configuration>
   </plugin>

(2)若为手动打包,可通过jar cvfe your.jar com.example.MainClass *.class命令创建包含主类的jar包;
(3)若依赖未包含,可使用java -cp "your.jar:lib/*" com.example.MainClass直接指定主类运行。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/20987.html

(0)
酷番叔酷番叔
上一篇 2025年8月31日 17:39
下一篇 2025年8月31日 17:57

相关推荐

  • 如何查看Shell父进程PID?

    在Linux系统中,每个进程(除初始进程init外)都由另一个进程创建,创建者称为父进程,其唯一标识为PPID(Parent Process ID),查看父进程PID是诊断进程关系、排查异常进程或管理进程树的关键操作,以下是几种可靠的方法:使用 ps 命令(最常用)ps(Process Status)是基础工具……

    2025年8月4日
    3300
  • linux如何检测u盘启动盘

    Linux 系统中,可通过 lsblk 查看磁盘分区信息,识别 U 盘设备,

    2025年8月17日
    3100
  • Linux如何安全踢掉登录用户?

    通过终止用户进程踢出(推荐)方法1:使用 pkill 命令sudo pkill -9 -u <用户名>原理:终止该用户所有进程(包括登录会话),参数说明:-u <用户名>:指定目标用户,-9:发送SIGKILL信号强制终止,示例:踢出用户 johnsudo pkill -9 -u joh……

    2025年6月19日
    5200
  • Linux如何压缩文件?常用命令及操作步骤详解?

    在Linux系统中,文件压缩是日常运维和开发中常见的操作,主要用于节省存储空间、加快文件传输速度,以及便于文件归档管理,Linux提供了多种压缩工具和命令,支持不同的压缩算法和格式,用户可以根据需求选择合适的方式,本文将详细介绍Linux中常用的文件压缩方法,包括gzip、bzip2、zip、tar及xz等工具……

    2025年8月26日
    3700
  • linux中如何写驱动

    Linux驱动开发是内核编程的核心内容,主要用于管理硬件设备,为上层应用提供统一的访问接口,驱动运行在内核态,直接操作硬件资源,因此需要严格遵循内核编程规范,确保稳定性和安全性,以下是Linux驱动的开发流程及关键要点,驱动开发基础概念Linux驱动主要分为字符设备、块设备、网络设备和杂项设备等,字符设备以字节……

    2025年10月6日
    1000

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信