在 Linux 系统中运行 JAR 包主要有以下几种方式,以下是详细步骤和注意事项:
java -jar your-application.jar
java -version
检查)。MANIFEST.MF
并指定了 Main-Class
)。java -Xms256m -Xmx1024m -jar your-application.jar
-Xms
:初始堆内存-Xmx
:最大堆内存-Dproperty=value
可设置系统属性。nohup java -jar your-application.jar > /dev/null 2>&1 &
nohup
防止进程因终端关闭而终止。> /dev/null 2>&1
丢弃所有输出(日志可重定向到文件,如 > app.log
)。&
表示后台运行。bash
ps -ef | grep java
/path/to/specific/jdk/bin/java -jar your-application.jar
若JAR依赖外部库(如 lib/
目录):
java -jar -Djava.ext.dirs=/path/to/libs your-application.jar
或使用 -cp
参数:
java -cp your-application.jar:/path/to/libs/* com.example.MainClass
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar your-application.jar
若JAR无执行权限:
chmod +x your-application.jar
(通常JAR不需要执行权限,但某些场景可能需要)
no main manifest attribute
bash
java -cp your-application.jar com.example.MainClass
内存不足
-Xmx
)。端口冲突
bash
netstat -tulnp | grep <port>
依赖缺失
-cp
或 java.ext.dirs
中指定。start.sh
)。服务化:通过 systemd
管理(示例单元文件 /etc/systemd/system/myapp.service
):
[Unit]
Description=My Java App
After=syslog.target network.target
[Service]
ExecStart=/usr/bin/java -jar /path/to/your-application.jar
User=appuser
Restart=always
[Install]
WantedBy=multi-user.target
操作命令:
sudo systemctl daemon-reload
sudo systemctl start myapp
sudo systemctl enable myapp # 开机自启
根据实际需求选择合适的方式,生产环境建议使用 systemd
或容器化(如Docker)管理。