当前位置:首页 > 问答 > 正文

Linux教程 Java部署 linux运行jar包的详细步骤与常见问题解决方法

Linux教程 | Java部署:Linux运行JAR包的详细步骤与常见问题解决

2025年8月最新消息:根据最新的Java开发者调查报告显示,Linux系统已成为Java应用部署的首选平台,占比高达72%,随着Java 21 LTS版本的广泛采用,其增强的容器支持和性能优化使得在Linux上运行JAR包更加高效稳定,下面我们就来详细介绍在Linux系统中部署和运行Java JAR包的全流程。

准备工作

在开始之前,你需要确保系统已经安装了合适版本的Java环境:

# 检查Java是否安装
java -version
# 如果没有安装,在Ubuntu/Debian上安装OpenJDK
sudo apt update
sudo apt install openjdk-21-jdk
# 在CentOS/RHEL上安装
sudo yum install java-21-openjdk-devel

注意:根据你的应用需求选择合适的Java版本,大多数现代应用推荐使用Java 17或21这些LTS版本。

运行JAR包的基本命令

最简单的运行方式是使用java -jar命令:

java -jar your-application.jar

如果你的应用需要指定内存大小:

# 设置初始堆内存为512M,最大堆内存为2G
java -Xms512m -Xmx2g -jar your-application.jar

后台运行JAR包的方法

使用nohup命令

nohup java -jar your-application.jar > app.log 2>&1 &
  • nohup:防止进程在终端退出时被终止
  • > app.log:将标准输出重定向到app.log文件
  • 2>&1:将错误输出也重定向到标准输出
  • &:在后台运行

使用systemd服务(推荐生产环境使用)

创建服务文件:

Linux教程 Java部署 linux运行jar包的详细步骤与常见问题解决方法

sudo vi /etc/systemd/system/myapp.service

如下:

[Unit]
Description=My Java Application
After=syslog.target network.target
[Service]
User=appuser
WorkingDirectory=/path/to/your/app
ExecStart=/usr/bin/java -Xms512m -Xmx2g -jar /path/to/your-application.jar
SuccessExitStatus=143
Restart=always
RestartSec=30
[Install]
WantedBy=multi-user.target

然后启用并启动服务:

sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp

常见问题与解决方法

"no main manifest attribute"错误

问题:运行JAR包时出现"no main manifest attribute, in your-application.jar"错误。

原因:JAR文件缺少Main-Class清单属性。

解决方案

Linux教程 Java部署 linux运行jar包的详细步骤与常见问题解决方法

  • 如果是自己打包的应用,确保在pom.xml或build.gradle中正确配置了主类
  • 对于Spring Boot应用,使用正确的打包插件
  • 临时解决方案:指定主类运行
java -cp your-application.jar com.yourpackage.MainClass

端口已被占用

问题:应用启动失败,提示端口已被占用。

解决方案

# 查找占用端口的进程
sudo netstat -tulnp | grep :8080
# 或者使用更现代的ss命令
sudo ss -tulnp | grep :8080
# 杀死占用进程(谨慎操作)
sudo kill -9 <PID>

内存不足问题

问题:应用运行一段时间后崩溃,出现OutOfMemoryError。

解决方案

  • 增加JVM内存参数
  • 添加内存溢出时生成堆转储文件参数
java -Xms1g -Xmx4g -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/dumps -jar your-application.jar

文件权限问题

问题:应用无法读取或写入文件。

Linux教程 Java部署 linux运行jar包的详细步骤与常见问题解决方法

解决方案

  • 检查运行JAR包的用户权限
  • 确保应用有对所需目录的读写权限
# 更改文件所有者
sudo chown -R appuser:appgroup /path/to/your/app
# 更改文件权限
sudo chmod -R 755 /path/to/your/app

高级技巧

使用jenv管理多Java版本

# 安装jenv
curl -L -s get.jenv.io | bash
# 添加Java版本
jenv add /usr/lib/jvm/java-21-openjdk
# 设置全局Java版本
jenv global 21

JVM调优参数示例

java -server \
     -Xms2g -Xmx2g \
     -XX:+UseG1GC \
     -XX:MaxGCPauseMillis=200 \
     -XX:ParallelGCThreads=4 \
     -XX:ConcGCThreads=2 \
     -XX:InitiatingHeapOccupancyPercent=70 \
     -jar your-application.jar

使用jconsole或VisualVM监控

# 添加JMX远程监控参数
java -Dcom.sun.management.jmxremote \
     -Dcom.sun.management.jmxremote.port=9010 \
     -Dcom.sun.management.jmxremote.local.only=false \
     -Dcom.sun.management.jmxremote.authenticate=false \
     -Dcom.sun.management.jmxremote.ssl=false \
     -jar your-application.jar

安全建议

  1. 不要以root身份运行JAR包:创建专用用户来运行你的Java应用
  2. 及时更新Java版本:定期检查并应用Java安全更新
  3. 限制网络访问:使用防火墙规则限制不必要的网络访问
  4. 保护敏感信息:不要将密码等敏感信息硬编码在JAR包中

通过以上步骤和技巧,你应该能够在Linux系统上顺利部署和运行Java JAR包应用,根据应用的具体需求,你可能还需要配置数据库连接、外部服务集成等额外设置。

发表评论