Linux下打包压缩war和解压war包 zip和jar

本文介绍了如何在 Linux 环境下使用 jar 命令将 Java 程序打包成 WAR 包,并详细解释了相关参数的使用方法。此外,还提供了解压 WAR 包的步骤,包括使用 jar 命令解压到当前目录或其他指定目录的方法。通过本教程,开发者可以轻松掌握 Linux 下 Java Web 应用的打包与解压技巧。

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

============jar=================

把当前目录下的所有文件打包成game.war
jar -cvfM0 game.war ./

-c   创建war包
-v   显示过程信息
-f    
-M
-0   这个是阿拉伯数字,只打包不压缩的意思


解压game.war

jar -xvf game.war

解压到当前目录


============zip=============

1、把/home目录下面的mydata目录压缩为mydata.zip
zip -r mydata.zip mydata #压缩mydata目录
2、把/home目录下面的mydata.zip解压到mydatabak目录里面
unzip mydata.zip -d mydatabak
3、把/home目录下面的abc文件夹和123.txt压缩成为abc123.zip
zip -r abc123.zip abc 123.txt
4、把/home目录下面的wwwroot.zip直接解压到/home目录里面
unzip wwwroot.zip
5、把/home目录下面的abc12.zip、abc23.zip、abc34.zip同时解压到/home目录里面
unzip abc\*.zip
6、查看把/home目录下面的wwwroot.zip里面的内容
unzip -v wwwroot.zip
7、验证/home目录下面的wwwroot.zip是否完整
unzip -t wwwroot.zip
8、把/home目录下面wwwroot.zip里面的所有文件解压到第一级目录
unzip -j wwwroot.zip

主要参数

-c:将解压缩的结果
-l:显示压缩文件内所包含的文件
-p:与-c参数类似,会将解压缩的结果显示到屏幕上,但不会执行任何的转换
-t:检查压缩文件是否正确
-u:与-f参数类似,但是除了更新现有的文件外,也会将压缩文件中的其它文件解压缩到目录中
-v:执行是时显示详细的信息
-z:仅显示压缩文件的备注文字
-a:对文本文件进行必要的字符转换
-b:不要对文本文件进行字符转换
-C:压缩文件中的文件名称区分大小写
-j:不处理压缩文件中原有的目录路径
-L:将压缩文件中的全部文件名改为小写
-M:将输出结果送到more程序处理
-n:解压缩时不要覆盖原有的文件
-o:不必先询问用户,unzip执行后覆盖原有文件
-P:使用zip的密码选项
-q:执行时不显示任何信息
-s:将文件名中的空白字符转换为底线字符
-V:保留VMS的文件版本信息
-X:解压缩时同时回存文件原来的UID/GID






=============详细版================================

因为种种原因公司需要把java程序达成war包。起先用zip命令打包,起先可以用,后来却无法使用。今天找到一个更好的办法。用jar命令,前提是要安装dk。


环境

RedHat Linux 9 + VWWare 8.0 + SSH 3.2.9 + Putty 0.62

问题

Linux下打包压缩war、解压war包和jar命令

解决

把project_a文件夹下的文件打包成project.war

1.      打包

jar -xvf project.war /project_a

-c  创建war包

-v  显示过程信息

-f  指定 JAR 文件名,通常这个参数是必须的

-M  不产生所有项的清单(MANIFEST〕文件,此参数会忽略 -m 参数

-0  这个是阿拉伯数字,只打包不压缩的意思

2.      解压

jar -xvf project.war

解压到当前目录

jar 命令详解

使用不带任何的 jar 命令我们可以看到 jar 命令的用法如下:

jar {ctxu}[vfm0M] [jar-文件] [manifest-文件] [-C 目录] 文件名 ...

其中 {ctxu} 是 jar 命令的子命令,每次 jar 命令只能包含 ctxu 中的一个,它们分别表示:

-c 创建新的 JAR 文件包

-t 列出 JAR 文件包的内容列表

-x 展开 JAR 文件包的指定文件或者所有文件

-u 更新已存在的 JAR 文件包 (添加文件到 JAR 文件包中)

特别注意,在参数的下达中, c/x/t/u 仅能存在一个!不可同时存在!

因为不可能同时压缩与解压缩。

-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?

-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?

-v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!

-f 指定 JAR 文件名,通常这个参数是必须的

请留意,在 f 之后要立即接档名喔!不要再加参数!

   例如使用『 tar -zcvfP tfile sfile』就是错误的写法,要写成

   『 tar -zcvPf tfile sfile』才对喔!

-p :使用原文件的原来属性(属性不会依据使用者而变)

-P :可以使用绝对路径来压缩!

-N :比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的文件中!

–exclude FILE:在压缩的过程中,不要将 FILE 打包!

-m 指定需要包含的 MANIFEST 清单文件

-0 只存储,不压缩,这样产生的 JAR 文件包会比不用该参数产生的体积大,但速度更快

-M 不产生所有项的清单(MANIFEST〕文件,此参数会忽略 -m 参数

[jar-文件] 即需要生成、查看、更新或者解开的 JAR 文件包,它是 -f 参数的附属参数

[manifest-文件] 即 MANIFEST 清单文件,它是 -m 参数的附属参数

[-C 目录] 表示转到指定目录下去执行这个 jar 命令的操作。它相当于先使用 cd 命令转该目录下再执行不带 -C 参数的 jar 命令,它只能在创建和更新 JAR 文件包的时候可用。  

文件名 ... 指定一个文件/目录列表,这些文件/目录就是要添加到 JAR 文件包中的文件/目录。如果指定了目录,那么 jar 命令打包的时候会自动把该目录中的所有文件和子目录打入包中。




=========================zip 详细版=========================


Linux 下zip包的压缩与解压

linux zip 命令详解 
功能说明:压缩文件。 
语 法:zip [-AcdDfFghjJKlLmoqrSTuvVwXyz$][-b <工作目录>][-ll][-n <字尾字符串>][-t <日期时间>][-<压缩效率>][压缩文件][文件...][-i <范本样式>][-x <范本样式>] 
补充说明:zip是个使用广泛的压缩程序,文件经它压缩后会另外产生具有".zip"扩展名的压缩文件。 
参 数: 
-A 调整可执行的自动解压缩文件。 
-b<工作目录> 指定暂时存放文件的目录。 
-c 替每个被压缩的文件加上注释。 
-d 从压缩文件内删除指定的文件。 
-D 压缩文件内不建立目录名称。 
-f 此参数的效果和指定"-u"参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中。 
-F 尝试修复已损坏的压缩文件。 
-g 将文件压缩后附加在既有的压缩文件之后,而非另行建立新的压缩文件。 
-h 在线帮助。 
-i<范本样式> 只压缩符合条件的文件。 
-j 只保存文件名称及其内容,而不存放任何目录名称。 
-J 删除压缩文件前面不必要的数据。 
-k 使用MS-DOS兼容格式的文件名称。 
-l 压缩文件时,把LF字符置换成LF+CR字符。 
-ll 压缩文件时,把LF+CR字符置换成LF字符。 
-L 显示版权信息。 
-m 将文件压缩并加入压缩文件后,删除原始文件,即把文件移到压缩文件中。 
-n<字尾字符串> 不压缩具有特定字尾字符串的文件。 
-o 以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该文件相同。 
-q 不显示指令执行过程。 
-r 递归处理,将指定目录下的所有文件和子目录一并处理。 
-S 包含系统和隐藏文件。 
-t<日期时间> 把压缩文件的日期设成指定的日期。 
-T 检查备份文件内的每个文件是否正确无误。 
-u 更换较新的文件到压缩文件内。 
-v 显示指令执行过程或显示版本信息。 
-V 保存VMS操作系统的文件属性。 
-w 在文件名称里假如版本编号,本参数仅在VMS操作系统下有效。 
-x<范本样式> 压缩时排除符合条件的文件。 
-X 不保存额外的文件属性。 
-y 直接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之类的系统下有效。 
-z 替压缩文件加上注释。 
-$ 保存第一个被压缩文件所在磁盘的卷册名称。 
-<压缩效率> 压缩效率是一个介于1-9的数值。


linux unzip 命令详解

功能说明:解压缩zip文件

语 法:unzip [-cflptuvz][-agCjLMnoqsVX][-P <密码>][.zip文件][文件][-d <目录>][-x <文件>] 或 unzip [-Z]

补充说明:unzip为.zip压缩文件的解压缩程序。

参 数:

-c 将解压缩的结果显示到屏幕上,并对字符做适当的转换。

-f 更新现有的文件。

-l 显示压缩文件内所包含的文件。

-p 与-c参数类似,会将解压缩的结果显示到屏幕上,但不会执行任何的转换。

-t 检查压缩文件是否正确。

-u 与-f参数类似,但是除了更新现有的文件外,也会将压缩文件中的其他文件解压缩到目录中。

-v 执行是时显示详细的信息。

-z 仅显示压缩文件的备注文字。

-a 对文本文件进行必要的字符转换。

-b 不要对文本文件进行字符转换。

-C 压缩文件中的文件名称区分大小写。

-j 不处理压缩文件中原有的目录路径。

-L 将压缩文件中的全部文件名改为小写。

-M 将输出结果送到more程序处理。

-n 解压缩时不要覆盖原有的文件。

-o 不必先询问用户,unzip执行后覆盖原有文件。

-P<密码> 使用zip的密码选项。

-q 执行时不显示任何信息。

-s 将文件名中的空白字符转换为底线字符。

-V 保留VMS的文件版本信息。

-X 解压缩时同时回存文件原来的UID/GID。

[.zip文件] 指定.zip压缩文件。

[文件] 指定要处理.zip压缩文件中的哪些文件。

-d<目录> 指定文件解压缩后所要存储的目录。

-x<文件> 指定不要处理.zip压缩文件中的哪些文件。

-Z unzip -Z等于执行zipinfo指令


范例:

zip命令可以用来将文件压缩成为常用的zip格式。unzip命令则用来解压缩zip文件。

1. 我想把一个文件abc.txt和一个目录dir1压缩成为yasuo.zip:

# zip -r yasuo.zip abc.txt dir1

2.我下载了一个yasuo.zip文件,想解压缩:

# unzip yasuo.zip

3.我当前目录下有abc1.zip,abc2.zip和abc3.zip,我想一起解压缩它们:

# unzip abc\?.zip

注释:?表示一个字符,如果用*表示任意多个字符。

4.我有一个很大的压缩文件large.zip,我不想解压缩,只想看看它里面有什么:

# unzip -v large.zip

5.我下载了一个压缩文件large.zip,想验证一下这个压缩文件是否下载完全了

# unzip -t large.zip

6.我用-v选项发现music.zip压缩文件里面有很多目录和子目录,并且子目录中其实都是歌曲mp3文件,我想把这些文件都下载到第一级目录,而不是一层一层建目录:

# unzip -j music.zip




<think>我们正在讨论Java中的JARWAR文件,以及它们在项目中的使用场景。根据引用内容,我们可以总结如下:1.**JAR文件(JavaArchive)**:-是一种Java归档文件格式,本质上是压缩文件(使用ZIP格式)。-含编译后的.class文件、资源文件(如图片、配置文件)清单文件(MANIFEST.MF)。-主要用途:-作为可执行文件:通过指定主类(Main-Class),可以直接用`java-jar`命令运行。-作为共享库:供其他Java项目引用。2.**WAR文件(WebArchive)**:-专门为Web应用程序设计的归档格式。-含Web应用所需的所有内容:Java类文件(.class)、JSP、HTML、CSS、JavaScript、配置文件(如web.xml)等。-必须部署到外部的Servlet容器(如Tomcat、Jetty)中运行。3.**SpringBoot项目中的打包方式选择**:-**JAR**:SpringBoot默认打包成可执行的JAR,内嵌Servlet容器(如Tomcat),因此可以直接运行,适合独立运行的微服务。-**WAR**:当需要将应用部署到已有的Servlet容器(如传统Web服务器)时,可以选择打包WAR。###区别总结表|**特性**|**JAR**|**WAR**||------------------|----------------------------------------|------------------------------------------||**文件内容**|.class文件、资源文件、清单文件|.class文件、Web资源(JSP/HTML等)、WEB-INF目录(含web.xml)||**运行方式**|可执行:`java-jar`或作为库被引用|必须部署到Servlet容器(如Tomcat)||**Servlet容器**|内嵌(SpringBoot默认)|需要外部容器||**适用场景**|独立应用、微服务、共享库|传统JavaWeb应用||**项目结构**|无特定要求|必须符合Servlet规范(如WEB-INF目录)|###使用场景详解####JAR文件场景1.**独立可执行应用**:如SpringBoot应用,打包JAR后可直接运行,无需额外安装Servlet容器。2.**共享库**:将通用功能(如工具类、算法模块)打包JAR,供其他项目通过Maven/Gradle依赖引入。####WAR文件场景1.**传统JavaWeb应用**:需部署到已有Servlet容器(如公司内部的Tomcat集群)。2.**与遗留系统集成**:当多个Web应用需共享同一个Servlet容器时(例如在一个Tomcat中部署多个应用)。###SpringBoot中的特殊考虑-**默认打包方式**:SpringBoot通过`spring-boot-maven-plugin`将应用打包为可执行JAR(内嵌容器)。-**切换为WAR**:1.修改`pom.xml`:将`<packaging>jar</packaging>`改为`<packaging>war</packaging>`。2.排除内嵌容器依赖(可选):若需减少WAR体积,可排除Tomcat依赖,改用外部容器。3.继承`SpringBootServletInitializer`:使应用支持外部容器启动。###示例:SpringBoot打包配置####可执行JAR配置(默认)```xml<!--pom.xml--><packaging>jar</packaging><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>```####WAR配置(支持外部容器)```xml<!--pom.xml--><packaging>war</packaging><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--排除内嵌Tomcat(可选)--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><scope>provided</scope><!--表示容器会提供--></dependency></dependencies>``````java//主类需继承SpringBootServletInitializer@SpringBootApplicationpublicclassApplicationextendsSpringBootServletInitializer{@OverrideprotectedSpringApplicationBuilderconfigure(SpringApplicationBuilderbuilder){returnbuilder.sources(Application.class);}publicstaticvoidmain(String[]args){SpringApplication.run(Application.class,args);}}```###决策建议-**选择JAR**:开发微服务、独立后台服务、命令行工具。-**选择WAR**:部署到已有Tomcat、需与其他Web应用共存、企业级传统部署环境。###相关问题1.如何在SpringBoot中从JAR打包切换为WAR打包?2.内嵌Servlet容器(如Tomcat)在可执行JAR中是如何工作的?3.WAR文件中的`WEB-INF`目录结构是怎样的?4.如何将第三方JAR含在WAR文件中?5.SpringBoot应用打包WAR后,如何配置外部Servlet容器?[^1]:Maven三种项目打包方式:POM、JARWAR的区别详解[^2]:打包JAR文件WAR文件,到底有什么区别?[^3]:java语言中.java文件、.class文件、.jar文件的区别[^4]:SpringBoot项目可以打包成可执行的JAR(JavaArchive)文件或WAR(WebArchive)文件,两者之间有一些区别</think>### Java JARWAR 文件的区别及使用场景 #### 核心区别总结 | **特性** | **JAR (Java Archive)** | **WAR (Web Archive)** | |------------------|---------------------------------------|-----------------------------------------| | **文件类型** | Java 标准归档格式 | Java Web 专用归档格式 | | **内容结构** | .class文件 + 资源文件 + 清单文件 | Web资源 + .class文件 + WEB-INF目录 | | **运行方式** | `java -jar` 直接运行 或 作为库引用 | 需部署到Servlet容器 (Tomcat/Jetty等) | | **容器依赖** | 可内嵌容器 (Spring Boot默认) | 必须依赖外部Servlet容器 | | **典型内容** | 普通Java类 + 配置文件 + 主类声明 | JSP/HTML + web.xml + 静态资源 + 库文件 | | **清单文件** | META-INF/MANIFEST.MF (指定主类) | WEB-INF/web.xml (配置Servlet) | --- ### 深度解析 #### 1. JAR 文件详解 - **本质**:ZIP格式的压缩含: - 编译后的 `.class` 文件 - 资源文件(如 `application.properties`) - 清单文件 `META-INF/MANIFEST.MF` - **核心能力**: ```java // MANIFEST.MF 关键声明 Main-Class: com.example.MainApp // 可执行JAR的入口 ``` - **Spring Boot场景**: - 内嵌Tomcat/Jetty容器 - 通过 `spring-boot-maven-plugin` 打包 - 启动命令:`java -jar app.jar` #### 2. WAR 文件详解 - **标准结构**: ``` myapp.war ├── index.jsp ├── images/ ├── WEB-INF/ │ ├── web.xml // 部署描述符 │ ├── classes/ // .class文件 │ └── lib/ // 依赖JAR └── META-INF/ // 元数据 ``` - **部署流程**: 1. 将WAR放入Tomcat的 `webapps/` 目录 2. 容器自动解并加载应用 3. 通过 `http://localhost:8080/myapp` 访问 --- ### 使用场景对比 #### ✅ JAR 适用场景 1. **微服务架构** Spring Boot 微服务独立运行(内嵌容器) 2. **命令行工具** 如数据库迁移工具 Flyway 3. **共享库** 通用工具(如 Apache Commons) 4. **批处理作业** 定时任务或数据处理程序 #### ✅ WAR 适用场景 1. **传统企业级Web应用** 需部署到现有Tomcat集群 2. **多应用共享容器** 同一服务器运行多个Web应用 3. **兼容遗留系统** 需与旧版Servlet容器集成 4. **JSP项目** 依赖容器JSP编译能力 --- ### Spring Boot 中的实践差异 #### JAR 模式 (默认) ```xml <!-- pom.xml --> <packaging>jar</packaging> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> ``` **特点**:单一可执行文件含所有依赖(约30-50MB) #### WAR 模式 ```xml <packaging>war</packaging> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> <!-- 关键!声明容器提供 --> </dependency> ``` ```java // 主类需扩展 SpringBootServletInitializer public class Application extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(Application.class); } } ``` **特点**:文件更小(约5-10MB),依赖容器提供Servlet API --- ### 性能与运维对比 | **维度** | **JAR** | **WAR** | |---------------|----------------------------------|----------------------------------| | 启动速度 | ⚡ 更快(内嵌容器优化) | ⏳ 依赖容器初始化 | | 内存占用 | 较高(含容器) | 较低(共享容器) | | 部署复杂度 | 简单(单文件传输) | 需容器管理 | | 集群扩展 | 每个实例独立容器 | 容器级集群管理 | | 热部署 | 需第三方工具(如JRebel) | 支持容器热加载 | --- ### 决策流程图 ```mermaid graph TD A[项目类型] --> B{需要Web容器特性?} B -->|JSP/旧版集成| C[选择WAR] B -->|独立服务/微服务| D[选择JAR] C --> E{使用Spring Boot?} E -->|是| F[配置provided依赖] E -->|否| G[标准WAR结构] D --> H[使用spring-boot-maven-plugin] ``` --- ### 常见问题解答 **Q:Spring Boot能否生成WAR?** **A**:可以!需: 1. 修改 `pom.xml` 为 `<packaging>war</packaging>` 2. 添加Tomcat依赖作用域 `provided` 3. 主类继承 `SpringBootServletInitializer`[^4] **Q:WAR中的LIB目录JAR有何关系?** **A**:WAR的 `WEB-INF/lib/` 存放项目依赖的第三方JAR文件,这些JAR会被容器类加载器识别[^3] --- ### 相关问题 1. Spring Boot内嵌Tomcat是如何实现可执行JAR的? 2. 如何将现有的WAR项目迁移到Spring Boot可执行JAR? 3. WAR文件部署到Tomcat后访问404如何排查? 4. Spring Boot多模块项目中如何组合JARWAR打包? 5. 云原生环境下JARWAR的部署策略有何不同? [^1]: Maven 三种项目打包方式:POM、JAR WAR 的区别详解 [^2]: 打包JAR文件WAR文件,到底有什么区别? [^3]: java语言中.java文件、.class文件、.jar文件的区别 [^4]: Spring Boot项目可以打包成可执行的JAR(Java Archive)文件或WAR(Web Archive)文件
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值