linux jar 命令的简单使用

本文介绍如何在Linux环境下使用jar命令进行Java程序的编译、打包及运行。从创建jar包到通过脚本文件执行,详细讲解了每一步操作,包括使用manifest.mf文件指定启动类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们都知道服务器基本上都是linux系统的,linux系统是开源的,他的安全性,性能和对硬件设备的要求都是windows无法比拟的,而作为程序员的我们写好的系统程序自然要放到服务器上去跑,虽然有些服务器支持可视化操作,但作为程序员最基本的linux部署操作我们还是必须掌握的。

linux jar命令的简单使用

由于个人对于linux命令的了解有限,如有什么不对之处请谅解,这里我们简单的介绍一下linux jar命令对java文件的编译,打jar包,以及通过脚本文件运行jar包的操作。

jar命令选项

-c 创建一个jar包
-t 显示jar中的内容列表
-x 解压jar包
-u 添加文件到jar包中
-f 指定jar包的文件名
-v 生成详细的报造,并输出至标准设备
-m 指定manifest.mf文件.(manifest.mf文件中可以对jar包及其中的内容作一些一设置)
-0 产生jar包时不对其中的内容进行压缩处理
-M 不产生所有文件的清单文件(Manifest.mf)。这个参数与忽略掉-m参数的设置
-i 为指定的jar文件创建索引文件
-C 表示转到相应的目录下执行jar命令,相当于cd到那个目录,然后不带-C执行jar命令

首先我们要在我们的服务器上准备两个文件,一个java文件,一个执行jar包的脚本文件
在这里插入图片描述
Main.java文件中有一个主方法,输出的是“Hello Word!”,我们要将它打成jar包
在这里插入图片描述
然后,我们把这个java文件编译为.class文件

在这里插入图片描述
然后,我们创建一个manifest.mf文件,这个文件中写启动方法,类似于我们java的启动类。
在这里插入图片描述
编辑这个.mf文件,输入Main-Class: Main,保存。
在这里插入图片描述
创建Main.jar
在这里插入图片描述
jarTest.sh文件是一个脚本文件,里面配置好我们的jar包地址执行这个脚本就可以运行了
在这里插入图片描述
在这里插入图片描述
最后执行脚本文件
在这里插入图片描述
这种用linux jar命令打jar包并执行的方式,我也是刚刚尝试,虽然不熟练,但掌握了一些新知识。

<think>好的,用户想知道如何在Linux系统中通过命令行运行或部署JAR文件。我需要先回忆相关的知识,并结合提供的引用内容来组织回答。 首先,用户提到部署JAR文件,可能涉及运行和部署的不同情况。根据引用[1],运行Java文件需要用到javac和java命令,但JAR文件的话,可能需要用java -jar命令。引用[2]提到部署JAR包时可能涉及防火墙设置,但用户的问题更基础,可能只需要基本的运行命令。引用[3]则讲的是修改已打包的JAR里的配置文件,这可能属于部署后的调整,但用户主要问题是如何运行或部署。 所以,第一步应该解释如何运行JAR文件,使用java -jar命令。需要确认JAR是可执行的,即包含Main-Class的清单文件。如果用户没有指定主类,可能需要通过-cp参数指定类路径和主类。 接下来,部署的话可能需要后台运行,比如使用nohup和&组合,这样即使终端关闭,JAR也能继续运行。引用[2]提到防火墙相关命令,可能需要提醒用户检查端口是否开放,比如用firewall-cmd或者iptables。 此外,如果JAR依赖外部库,需要使用-cp参数添加依赖的JAR包路径,这在引用[1]中提到的javac命令类似,但运行的时候也需要指定类路径。例如:java -cp app.jar:libs/* com.example.Main。 然后,可能还需要考虑如何设置JVM参数,比如内存大小,使用-Xmx和-Xms参数。例如:java -Xmx512m -jar app.jar。 关于部署后的维护,引用[3]的方法可以用于修改JAR内的配置文件,这可能对用户有帮助,但用户当前的问题可能不需要这个,不过可以作为补充信息,说明在部署后如何调整配置而无需重新打包。 最后,总结常用的命令步骤,给出示例,并提醒可能遇到的问题,如端口冲突、权限问题(需要chmod +x jar文件吗?其实java -jar不需要,但文件本身需要有可读权限)。可能还需要提到使用systemd服务来管理JAR进程,实现开机启动和守护进程,但引用中没有提到,可能需要避免,或者简单提及作为扩展。 现在需要检查是否有遗漏的步骤,比如如何构建JAR文件?但用户的问题是关于运行和部署,可能已经假设用户有JAR文件了。不过如果有需要,可以提到使用Maven或Gradle打包,但引用里没有相关信息,可能不必要。 综上所述,回答的结构应该是: 1. 运行可执行JAR的基本命令:java -jar filename.jar 2. 指定主类运行(如果清单中没有Main-Class) 3. 设置类路径和JVM参数 4. 后台运行的方法 5. 检查端口和防火墙 6. 修改JAR内的配置(引用[3]的内容) 7. 可能的问题和注意事项 需要确保使用正确的格式,如代码块用反引号,数学公式用$...$,但这里可能用不上数学公式。同时生成相关问题,如如何后台运行、查看日志、处理依赖等。</think>### 如何在 Linux 系统中通过命令行运行或部署 JAR 文件? #### 1. **运行可执行 JAR 文件** 若 JAR 文件包含可执行清单(即 `MANIFEST.MF` 中指定了 `Main-Class`),可直接使用以下命令: ```bash java -jar your-application.jar ``` 此命令会执行 JAR 文件中的主类[^1]。 #### 2. **指定主类运行** 如果未配置清单文件,需手动指定主类: ```bash java -cp your-application.jar com.example.MainClass ``` 其中 `com.example.MainClass` 是包含 `main` 方法的完整类名。 #### 3. **处理依赖项** 若 JAR 依赖外部库,需通过 `-cp` 指定类路径: ```bash java -cp your-application.jar:libs/* com.example.MainClass ``` 此处 `libs/*` 表示依赖的所有 JAR 文件所在的目录。 #### 4. **设置 JVM 参数** 调整内存等 JVM 参数: ```bash java -Xmx512m -Xms256m -jar your-application.jar ``` - `-Xmx512m`: 最大堆内存为 512MB - `-Xms256m`: 初始堆内存为 256MB #### 5. **后台运行** 使用 `nohup` 和 `&` 保持进程在后台运行: ```bash nohup java -jar your-application.jar > output.log 2>&1 & ``` - `nohup`: 忽略挂断信号,终端关闭后仍运行 - `> output.log`: 输出重定向到日志文件 - `2>&1`: 将错误输出合并到标准输出 - `&`: 后台运行 #### 6. **检查端口和防火墙** 部署时需确保端口开放(例如 8080): ```bash # 查看端口占用 netstat -tuln | grep 8080 # 开放端口(CentOS) firewall-cmd --zone=public --add-port=8080/tcp --permanent firewall-cmd --reload ``` 若端口被占用,需终止相关进程或更换端口[^2]。 #### 7. **修改 JAR 内的配置文件** 若需调整已部署 JAR 的配置(如 `application.yml`),无需重新打包: ```bash vim your-application.jar # 直接编辑文件并替换配置文件 ``` 编辑后保存即可生效[^3]。 #### 8. **通过 systemd 管理服务(高级)** 创建服务文件 `/etc/systemd/system/myapp.service`: ```ini [Unit] Description=My Java Application After=syslog.target [Service] ExecStart=/usr/bin/java -jar /path/to/your-application.jar User=appuser Restart=always [Install] WantedBy=multi-user.target ``` 启动并启用服务: ```bash systemctl start myapp systemctl enable myapp ``` #### 常见问题排查 - **权限问题**:确保 JAR 文件可读:`chmod +r your-application.jar` - **依赖缺失**:检查 `-cp` 参数是否包含所有依赖路径 - **日志查看**:使用 `tail -f output.log` 实时监控日志
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值