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

相关推荐

  • Linux系统下如何新建一个操作面板?

    在Linux操作系统中,面板(Panel)是桌面环境的核心组件之一,通常用于启动应用程序、管理运行窗口、显示系统状态(如时间、网络、电量)等,不同桌面环境(如GNOME、KDE Plasma、XFCE等)的面板配置方式存在差异,但核心逻辑相似——通过添加组件(小工具/插件)、调整位置与样式来实现个性化定制,本文……

    2025年8月26日
    13600
  • Linux系统中如何获取指定进程的准确名称?

    在Linux系统中,获取进程名是系统管理、调试和监控中的基础操作,进程名(Process Name)通常指进程的可执行文件名或用户定义的标识符,用于区分不同类型的进程,本文将详细介绍多种获取进程名的方法,涵盖基础命令、系统文件、专用工具等场景,并对比不同方法的适用场景与优缺点,基础命令法:ps与top/htop……

    2025年9月30日
    10600
  • Linux如何挂载U盘

    检测U盘设备插入U盘,执行命令识别设备:sudo fdisk -l观察输出结果,通常U盘显示为 /dev/sdb 或 /dev/sdc(末尾的 sdb1、sdc1 表示分区),通过容量和分区类型(如 FAT32、NTFS)确认U盘标识,使用lsblk快速查看:lsblk输出示例: sdb 8:16 1 14.9……

    2025年7月9日
    14200
  • Linux tar文件如何压缩文件的操作步骤?

    Linux系统中的tar命令是常用的文件归档工具,它能够将多个文件或目录合并成一个单一的文件(称为tar包),同时结合压缩工具(如gzip、bzip2、xz等)实现压缩功能,有效节省存储空间并便于传输,本文将详细介绍tar命令如何压缩文件,包括常用压缩格式、选项参数、实际操作示例及注意事项,tar命令基础结构与……

    2025年9月19日
    12100
  • Linux服务器重启的具体正确操作步骤有哪些?详细说明如下

    Linux服务器重启是系统管理中的常见操作,无论是系统更新、内核升级、服务异常恢复还是硬件调整,都可能需要重启服务器,但重启操作需谨慎,尤其对于生产环境服务器,不当的重启可能导致服务中断、数据丢失或系统异常,本文将详细介绍Linux服务器重启的各种方法、注意事项及不同场景下的操作建议,帮助管理员安全、高效地完成……

    2025年9月22日
    11000

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信