学习jar命令之后,我对jar包的概念有更深刻的认识

初学java的时候,一直到jar包的概念非常模糊,搜索各种解释都是说是一种压缩格式,就好像zip的压缩格式一样,正好解压缩工具可以解压jar包。
也有疑惑为什么jar是一种压缩格式,那为什么不直接用zip就好了?
所以应该还是不同的,搜索了很多文章关于jar包的,都解释的不够清晰,没有触发我的深刻印象。
直到偶然看到jar命令之后,然后各种搜索关于jar命令的文章,终于让我找到了一丝曙光,下面就记录一下关于jar命令的用法,其实现在有很多的IDE工具,基本上不需要手工操作jar命令,所以也导致对jar包的陌生。

概念释疑

  • jar包
    jar全称JavaTM Archive file,java归档文件
    war全称Web Archive file,web归档文件
    我也想说一句,这真的就是把文档压缩方便管理,但是又有不同,jar中有一些特殊的文件,记录了一些特殊的信息,比如META-INF/MANIFEST.MF文件,就记录了一些特殊的信息,有固定的格式,java命令能够解析出来文件内容和意义。
Manifest-Version: 1.0   //版本
Created-By: Apache Ant 1.5.1  //声明该文件的生成者,jar命令行工具生成的
Extension-Name: Struts Framework
Specification-Title: Struts Framework
Specification-Vendor: Apache Software Foundation
Specification-Version: 1.1
Implementation-Title: Struts Framework
Implementation-Vendor: Apache Software Foundation
Implementation-Vendor-Id: org.apache
Implementation-Version: 1.1
Class-Path:  commons-beanutils.jar commons-collections.jar commons-dig
 ester.jar commons-logging.jar commons-validator.jar jakarta-oro.jar s
 truts-legacy.jar //依赖jar
Build-Jdk: 1.8.0_226 //jdk编译版本
Main-Class: com.sidaier.vlook.Estimate //main入口类,可执行jar包

 

MF文件的规则
1.不能有其他的空格和空行
2.key-value对必须是 key+冒号+空格+value
3.最后必须有两个空行

  • package包
    package是java文件中一种去重机制,和jar基本没有什么关系,当时刚刚学习的时候傻傻分不清楚,package是命名空间,主要区分java类,java的全类名就是包含package的,在java文件的第一行就是声明包用的。如果不同的jar包中,package相同并且类名相同,jvm就会认为是同一个类。
package com.sidaier.test;//包名

public class TestPackage
{
	public static void main(String[] args){
		System.out.println("test......");
	}
}

jar命令

命令解析

win打开cmd窗口,输入jar命令,会出现下面的解释

用法: jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] files …
选项:
-c 创建新档案
-t 列出档案目录
-x 从档案中提取指定的 (或所有) 文件
-u 更新现有档案(更新MANIFEST.MF,向现有的MF文件增加内容)
-v 在标准输出中生成详细输出
-f 指定档案文件名
-m 包含指定清单文件中的清单信息(一定要符合MANIFEST.MF文件的格式,否则打包不进去,重新生成) MANIFEST.MF
-n 创建新档案后执行 Pack200 规范化
-e 为捆绑到可执行 jar 文件的独立应用程序 指定应用程序入口点
-0 仅存储; 不使用任何 ZIP 压缩
-P 保留文件名中的前导 ‘/’ (绝对路径) 和 “…” (父目录) 组件
-M 不创建条目的清单文件(MANIFEST.MF)
-i 为指定的 jar 文件生成索引信息
-C 更改为指定的目录并包含以下文件

如果任何文件为目录, 则对其进行递归处理。
清单文件名, 档案文件名和入口点名称的指定顺序与 ‘m’, ‘f’ 和 ‘e’ 标记的指定顺序相同。

示例 1: 将两个类文件归档到一个名为 classes.jar 的档案中:
jar cvf classes.jar Foo.class Bar.class
示例 2: 使用现有的清单文件 ‘mymanifest’ 并将 foo/ 目录中的所有文件归档到 ‘classes.jar’ 中:
jar cvfm classes.jar mymanifest -C foo/ .

javac命令
javac -d . TestPackage.java
//这个命令主要是生成包路径

在这里插入图片描述

jar命令
jar -cvf test.jar TestPackage.class

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值