菜鸟科技网

Linux命令如何运行jar文件?

在Linux系统中,运行JAR文件是Java开发者和运维人员常见的操作,涉及多种命令行参数和环境配置,以下是关于Linux命令运行JAR文件的详细说明,包括基础命令、高级参数、常见问题及解决方案。

Linux命令如何运行jar文件?-图1
(图片来源网络,侵删)

基础运行命令

在Linux终端中,运行JAR文件最基础的命令是使用java命令结合-jar参数,基本语法如下:

java -jar jar文件名.jar

若有一个名为app.jar的文件,可直接执行:

java -jar app.jar

此命令会启动JAR文件中的主类(在MANIFEST.MF文件中通过Main-Class属性指定的类),并默认使用当前目录下的类路径和系统环境变量。

命令参数详解

指定JVM参数

运行JAR文件时,可能需要调整JVM的内存分配、垃圾回收策略等参数,可通过-X系列参数实现,

Linux命令如何运行jar文件?-图2
(图片来源网络,侵删)
java -Xms512m -Xmx2g -jar app.jar
  • -Xms:设置JVM堆内存初始大小,如512m表示512MB。
  • -Xmx:设置JVM堆内存最大大小,如2g表示2GB。
  • 其他常用参数包括-XX:+UseG1GC(使用G1垃圾回收器)、-Dfile.encoding=UTF-8(设置文件编码)等。

指定类路径(Classpath)

若JAR文件依赖外部库(如.jar文件或目录),需通过-cp-classpath参数指定类路径:

java -cp ".:lib/*" -jar app.jar
  • 表示当前目录,lib/*表示lib目录下的所有JAR文件(Linux/Unix使用冒号分隔路径,Windows使用分号)。
  • 若使用-jar参数,类路径通常由JAR文件的MANIFEST.MF中的Class-Path属性定义,但-cp会覆盖该配置。

后台运行与日志管理

在服务器环境中,通常需要将JAR程序置于后台运行,并输出日志到文件,可通过nohup&组合实现:

nohup java -jar app.jar > app.log 2>&1 &
  • nohup:使进程在终端关闭后继续运行。
  • >:将标准输出重定向到app.log
  • 2>&1:将错误输出重定向到标准输出。
  • &:将命令放入后台执行。

指定主类

若JAR文件未正确配置Main-Class,可通过-cp主类名手动指定:

java -cp app.jar com.example.MainClass

高级场景配置

使用系统服务(Systemd)

对于长期运行的Java应用,可将其配置为系统服务,创建服务文件/etc/systemd/system/myapp.service

Linux命令如何运行jar文件?-图3
(图片来源网络,侵删)
[Unit]
Description=My Java Application
After=network.target
[Service]
User=javauser
Group=javauser
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/java -jar app.jar
SuccessExitStatus=143
Restart=on-failure
[Install]
WantedBy=multi-user.target

通过systemctl start myapp启动服务,并设置开机自启systemctl enable myapp

多环境配置

通过-D参数传递自定义属性,实现不同环境(开发/测试/生产)的配置切换:

java -Dspring.profiles.active=prod -jar app.jar

性能调优工具

使用jps查看Java进程:

jps -l

通过jstat监控JVM内存和GC情况:

jstat -gcutil <进程ID> 1s

常见问题与解决方案

"Failed to configure a DataSource"错误

原因:未正确配置数据库连接参数或依赖缺失。
解决:检查application.propertiesapplication.yml中的数据库配置,并确保pom.xmlbuild.gradle中包含相关驱动依赖(如mysql-connector-java)。

"OutOfMemoryError: Java heap space"

原因:JVM堆内存不足。
解决:增加-Xmx参数值,如java -Xmx4g -jar app.jar,或通过jmap分析内存泄漏:

jmap -dump:format=b,file=heapdump.hprof <进程ID>

相关问答FAQs

Q1: 如何查看JAR文件的依赖信息?
A1: 使用jar tf命令查看JAR内容,或通过javap -v反编译主类查看依赖,对于Maven/Gradle项目,可执行mvn dependency:treegradle dependencies生成依赖树。

Q2: 如何停止后台运行的JAR进程?
A2: 首先ps aux | grep java找到进程ID,然后通过kill <进程ID>终止进程,若进程无响应,可使用kill -9 <进程ID>强制终止,对于通过systemd启动的服务,需执行systemctl stop myapp

分享:
扫描分享到社交APP
上一篇
下一篇