Linux下如何运行jar包?操作步骤有哪些?

在Linux系统中运行JAR包是Java应用部署的常见操作,涉及Java环境准备、运行方式配置、参数调优及问题排查等多个环节,以下是详细步骤和注意事项,帮助您顺利在Linux环境下运行JAR包。

linux 如何运行jar

运行JAR包前的准备工作

确认Java环境已安装

JAR包依赖Java虚拟机(JVM)运行,需确保系统已安装Java开发工具包(JDK)或Java运行时环境(JRE),可通过以下命令检查Java版本:

java -version  # 查看Java版本
javac -version # 查看JDK编译器版本(若仅需运行JAR,JRE即可)

若提示“命令未找到”,需安装Java,主流Linux发行版的安装命令如下:

  • Ubuntu/Debiansudo apt update && sudo apt install openjdk-11-jdk(以OpenJDK 11为例)
  • CentOS/RHELsudo yum install java-11-openjdk-devel(需先配置EPEL源)
  • 手动安装JDK:从Oracle或OpenJDK官网下载tar.gz包,解压后配置JAVA_HOME环境变量(如export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64,并添加到~/.bashrc/etc/profile)。

安装完成后,再次执行java -version确认输出Java版本信息,表示环境配置成功。

确认JAR包存在且有执行权限

假设JAR包位于当前目录(如app.jar),先用ls -l检查文件权限:

ls -l app.jar

若权限中无执行权限(即无x标志),需通过chmod命令添加:

chmod +x app.jar  # 添加执行权限

若JAR包不在当前目录,需使用绝对路径或相对路径,例如/opt/app/app.jar../app.jar

运行JAR包的常用方式

前台运行(适合调试)

直接使用java -jar命令运行JAR包,终端会阻塞并显示程序输出(日志或错误信息):

java -jar app.jar

特点:关闭终端或按Ctrl+C会终止程序,适合临时调试或测试。

后台运行(适合生产环境)

为避免终端关闭导致程序终止,可使用以下方式让JAR包在后台运行:

  • 使用&符号

    linux 如何运行jar

    java -jar app.jar &

    特点:程序在后台运行,但终端关闭后进程会被终止(受终端会话组控制)。

  • 使用nohup命令(推荐)
    nohup(no hang up)能让程序在用户退出终端后继续运行,默认将输出重定向到nohup.out文件:

    nohup java -jar app.jar &

    若需指定日志文件路径(如/var/log/app.log),可结合重定向:

    nohup java -jar app.jar > /var/log/app.log 2>&1 &

    参数说明

    • > /var/log/app.log:标准输出重定向到指定文件;
    • 2>&1:错误输出重定向到标准输出(即合并日志);
    • &:让命令在后台执行。

    特点:程序长期运行,适合服务部署,可通过psjobs命令查看进程状态。

指定JVM参数运行

运行JAR包时可通过JVM参数优化性能,例如设置堆内存、垃圾回收策略等,常用参数如下:

参数 作用说明 示例
-Xms 设置JVM初始堆内存大小 -Xms512m(初始堆512MB)
-Xmx 设置JVM最大堆内存大小 -Xmx1024m(最大堆1GB)
-Xss 设置线程栈大小 -Xss256k(线程栈256KB)
-XX:+UseG1GC 使用G1垃圾回收器 -XX:+UseG1GC
-Dfile.encoding 设置文件编码(如UTF-8) -Dfile.encoding=UTF-8
-cp/-classpath 指定类路径(若JAR依赖外部jar包 -cp /lib/*:app.jar

示例:设置堆内存为1GB~2GB,使用G1垃圾回收器,并指定日志编码:

nohup java -Xms1024m -Xmx2048m -XX:+UseG1GC -Dfile.encoding=UTF-8 -jar app.jar > /var/log/app.log 2>&1 &

常见问题排查

错误:“无法加载主类”或“Main manifest attribute, not found”

原因:JAR包未正确指定Main-Class(入口类),或MANIFEST.MF文件配置缺失。
解决

  • 检查JAR包的MANIFEST.MF文件(位于META-INF/目录下),确认包含Main-Class: com.example.Main(入口类全限定名);
  • MANIFEST.MF缺失,需重新打包JAR(使用Maven/Gradle的maven-jar-pluginjar命令指定Main-Class);
  • 若无法修改JAR包,可通过-cp参数手动指定入口类:
    java -cp app.jar com.example.Main

错误:“内存溢出”(OutOfMemoryError: Java heap space)

原因:JVM堆内存设置过小,或程序存在内存泄漏。
解决

  • 增加堆内存大小(如-Xmx4096m);
  • 使用内存分析工具(如MAT、JProfiler)分析内存泄漏;
  • 若为短期任务,可使用-XX:+HeapDumpOnOutOfMemoryError生成堆转储文件(java_pid<pid>.hprof),用于后续分析。

端口冲突错误(Address already in use)

原因:JAR绑定的端口已被其他进程占用。
解决

linux 如何运行jar

  • 查看端口占用情况:netstat -tuln | grep 8080(假设端口为8080);
  • 终止占用进程:kill -9 <PID>PID为进程ID);
  • 或修改JAR配置的端口(如-Dserver.port=8081)。

相关问答FAQs

问题1:如何让JAR包开机自启?

解答:可通过Linux的systemd服务实现开机自启,步骤如下:

  1. 创建服务文件(如/etc/systemd/system/myapp.service):

    sudo vim /etc/systemd/system/myapp.service
  2. 添加以下内容(根据实际路径修改):

    [Unit]
    Description=My Java Application
    After=network.target
    [Service]
    User=root
    WorkingDirectory=/opt/app
    ExecStart=/usr/bin/java -jar app.jar
    ExecStop=/bin/kill -15 $MAINPID
    SuccessExitStatus=143
    Restart=always
    RestartSec=10
    [Install]
    WantedBy=multi-user.target
  3. 启用并启动服务:

    sudo systemctl daemon-reload    # 重新加载systemd配置
    sudo systemctl enable myapp     # 开机自启
    sudo systemctl start myapp      # 启动服务
  4. 查看服务状态:sudo systemctl status myapp

问题2:如何实时查看JAR包的运行日志?

解答:根据运行方式选择合适的日志查看方法:

  • nohup或日志重定向:使用tail -f命令实时跟踪日志文件,
    tail -f /var/log/app.log  # 实时查看日志末尾内容
  • systemd服务:使用journalctl命令查看服务日志,
    journalctl -u myapp -f  # 实时查看myapp服务的日志
    journalctl -u myapp --since today  # 查看今日日志
  • 过滤关键字:若需查看特定关键字(如“ERROR”)的日志,可通过grep过滤:
    tail -f /var/log/app.log | grep "ERROR"

通过以上步骤和配置,您可在Linux系统中稳定运行JAR包,并根据实际需求调整运行方式和参数,若遇到复杂问题,可结合JVM工具(如jstatjstack)进一步分析性能和异常。

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

(0)
酷番叔酷番叔
上一篇 5小时前
下一篇 5小时前

相关推荐

  • 如何彻底卸载MySQL?

    在Linux操作系统中卸载MySQL需要谨慎操作,确保数据安全和系统稳定,以下是详细步骤,适用于主流发行版(Ubuntu/Debian、CentOS/RHEL),操作前请务必备份重要数据,卸载前的关键准备停止MySQL服务避免进程占用导致卸载异常:sudo systemctl stop mysql # Ubun……

    2025年7月17日
    3500
  • Linux字体安装难?如何提升设计专业性?

    准备工作获取字体文件从可信来源下载字体(如Google Fonts、Font Squirrel),常见格式:.ttf(TrueType)、.otf(OpenType),解压字体包(如为压缩文件)unzip fonts.zip -d ~/Downloads/fonts # 示例路径安装方法方法1:用户级安装(仅当……

    2025年6月16日
    3400
  • Linux内存使用异常如何速查?

    free 命令(最常用)作用:快速查看物理内存、交换空间(Swap)和内核缓冲区的使用情况,常用参数:-h(人性化显示单位):free -h-s [秒](定时刷新):free -h -s 5(每5秒刷新)输出解析: total used free shared buff/cache availableMem……

    2025年7月19日
    2500
  • Linux启动级别配置错误有多危险?

    Linux启动级别基础Linux传统启动级别分为7种(0-6),不同发行版可能有差异:| 级别 | 用途 | 说明 ||——|——|——|| 0 | 关机 | 系统停止运行 || 1 | 单用户模式 | 仅root权限,用于系统修复 || 2 | 多用户模式(无网络) | 无NFS服务……

    2025年7月29日
    2000
  • Linux中如何终止一个正在运行的脚本?

    在Linux系统中,脚本作为自动化任务的核心载体,其运行状态的管理至关重要,无论是调试异常、释放资源还是终止无响应任务,掌握正确的脚本终止方法都是Linux用户的必备技能,本文将详细讲解Linux中终止脚本的多种方式,涵盖前台、后台进程及不同场景下的处理技巧,帮助用户高效管理脚本运行状态,前台脚本的终止方法前台……

    20小时前
    300

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信