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)
酷番叔酷番叔
上一篇 2025年9月9日 04:13
下一篇 2025年9月9日 04:25

相关推荐

  • Linux系统如何安装hph?

    在Linux系统中安装PHP是Web开发中的常见需求,无论是搭建WordPress、Laravel等应用,还是运行自定义的PHP脚本,都需要正确安装并配置PHP环境,本文将以主流Linux发行版(如Ubuntu/Debian、CentOS/RHEL、Arch Linux)为例,详细介绍PHP的安装步骤,包括环境……

    2025年10月7日
    7400
  • Linux系统IP冲突怎么办?,快速解决Linux IP地址冲突,如何检测Linux的IP冲突?

    使用arp-scan工具(推荐)arp-scan通过主动发送ARP请求检测IP冲突,结果精准可靠,步骤:安装工具(Debian/Ubuntu为例):sudo apt update && sudo apt install arp-scan扫描本地网络(替换eth0为你的网卡名):sudo arp……

    2025年6月24日
    10100
  • Linux文本换行如何处理?

    理解换行符:Linux vs Windows vs MacLinux/Unix:使用 LF(\n)表示换行(ASCII码 0x0A),Windows:使用 CR+LF(\r\n)表示回车换行(ASCII码 0x0D 0x0A),Classic Mac(旧系统):使用 CR(\r),差异影响:跨系统传输文本文件时……

    2025年7月21日
    10700
  • Linux中误删文件后如何恢复数据?

    在Linux系统中,文件删除后并非立即从物理存储中消失,理解其底层原理是恢复文件的关键,当用户通过rm命令删除文件时,系统实际执行的操作是:在文件系统的inode表中将该文件的链接数减1,当链接数降为0时,文件占用的数据块被标记为“可覆盖”,但数据本身仍保留在磁盘上,直到有新数据写入覆盖这些数据块,若能在数据被……

    2025年8月25日
    7100
  • 快速检查软件是否安装?轻松搞定!

    为什么需要发送syslog?集中管理:将多台服务器的日志汇总到单一平台(如ELK、Graylog),实时分析:快速检测安全事件(如入侵尝试)或系统错误,合规性:满足GDPR、等保等法规对日志存储的要求,核心概念syslog协议Linux通过syslog守护进程(如rsyslog/syslog-ng)处理日志,支……

    2025年7月17日
    10700

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信