java---jar详解

2023-09-14 19:01:43

一、help

C:\Users\lichf1>jar
用法: jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] files ...
选项:
    -c  创建新档案
    -t  列出档案目录
    -x  从档案中提取指定的 (或所有) 文件
    -u  更新现有档案
    -v  在标准输出中生成详细输出
    -f  指定档案文件名
    -m  包含指定清单文件中的清单信息
    -n  创建新档案后执行 Pack200 规范化
    -e  为捆绑到可执行 jar 文件的独立应用程序
        指定应用程序入口点
    -0  仅存储; 不使用任何 ZIP 压缩
    -P  保留文件名中的前导 '/' (绝对路径)".." (父目录) 组件
    -M  不创建条目的清单文件
    -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/ .

二、参数详解

1、简单打包

jar -cf jar包名     class-file1  class-file2 ......

2、-C dir 指定class文件路径,并打包该路径下的class文件

jar -cf jar包名  -C  dir  .  
#-C dir  相当于cd到该目录,然后执行打包命令
#将 foo/ 目录中的所有文件归档到 'classes.jar' 中:
jar cvfm classes.jar mymanifest -C foo/ .

3、-t 查看jar包文件列表

4、-v 打印详细信息

5、-m 指定自定义mainfest.mf文件,并将其中内容覆盖到META-INF\MAINFEST.MF文件中

6、-u 更新META-INF\MAINFEST.MF文件

7、-e 指定入口类,即 com.bos.YYZCApplication

8、 jar -i jar包 生成索引

9、-M 不创建META-INF\MAINFEST.MF文件

10、-x 解压

注意

清单文件名(mainfest文件), 档案文件名(jar包文件)和入口点(程序入口类)名称的指定顺序 与 ‘m’, ‘f’ 和 ‘e’ 标记的指定顺序相同

三、具体使用

1、将class文件打包,并指定入口类

D:\project>jar -cvfe com.bos.jar  com.bos.YYZCApplication   .\com\bos\*class    .\com\bos\service\*class
已添加清单
正在添加: com/bos/Student.class(输入 = 279) (输出 = 213)(压缩了 23%)
正在添加: com/bos/YYZCApplication.class(输入 = 557) (输出 = 375)(压缩了 32%)
正在添加: com/bos/service/Working.class(输入 = 288) (输出 = 222)(压缩了 22%)
## 执行
D:\project>java -jar com.bos.jar
hello world

D:\project>

2、将class文件打包,并指定自定义mainfest.mf文件,mainfest.mf在当前路径下

cat mainfes.mf
Manifest-Version: 1.0
Created-By: 1.8.0_144 (Oracle Corporation)
Main-Class: com.bos.YYZCApplication

D:\project>jar -cvfm com.bos.jar  mainfes.mf   .\com\bos\*class    .\com\bos\service\*class
已添加清单
正在添加: com/bos/Student.class(输入 = 279) (输出 = 213)(压缩了 23%)
正在添加: com/bos/YYZCApplication.class(输入 = 557) (输出 = 375)(压缩了 32%)
正在添加: com/bos/service/Working.class(输入 = 288) (输出 = 222)(压缩了 22%)

D:\project>java -jar com.bos.jar
hello world

D:\project>

3、将test目录下的所有文件打包,并指定mainfest.mf文件,mainfest.mf在当前路径下(不是在test路径下)(注意最后的dot)

D:\project>jar -cvfm com.jar mainfes.mf   -C test .
已添加清单
正在添加: com/(输入 = 0) (输出 = 0)(存储了 0%)
正在添加: com/bos/(输入 = 0) (输出 = 0)(存储了 0%)
正在添加: com/bos/service/(输入 = 0) (输出 = 0)(存储了 0%)
正在添加: com/bos/service/Working.class(输入 = 288) (输出 = 222)(压缩了 22%)
正在添加: com/bos/service/Working.java(输入 = 163) (输出 = 102)(压缩了 37%)
正在添加: com/bos/Student.class(输入 = 279) (输出 = 213)(压缩了 23%)
正在添加: com/bos/Student.java(输入 = 141) (输出 = 90)(压缩了 36%)
正在添加: com/bos/YYZCApplication.class(输入 = 557) (输出 = 375)(压缩了 32%)
正在添加: com/bos/YYZCApplication.java(输入 = 308) (输出 = 186)(压缩了 39%)

D:\project>java -jar com.jar
hello world

D:\project>

更多推荐

使用JAXB将xml转成Java对象

文章目录使用JAXB将xml转成Java对象1.xml内容2.Java对象类3.封装的工具类4.测试使用JAXB将xml转成Java对象工作中遇到个问题,需要将xml转对象,之前复杂的xml都是自己用dom4j来解析组装成Java对象,但是对于简单的,看到了JAXB处理的这种方式,就整理下,写成个工具类。1.xml内容

Linux系统编程——线程的学习

学习参考博文:Linux多线程编程初探Linux系统编程学习相关博文Linux系统编程——文件编程的学习Linux系统编程——进程的学习Linux系统编程——进程间通信的学习Linux系统编程——网络编程的学习Linux系统编程——线程的学习一、概述1.进程与线程的区别2.使用线程的理由3.互斥量4.条件变量二、线程A

武汉凯迪正大—继保校验仪的产品特点

一、武汉凯迪正大继保仪的产品特点有哪些?1、经典的WindowsXP操作界面,人机界面友好,操作简便快捷,为了方便用户使用,定义了大量键盘快捷键,使得操作“一键到位”2、高性能的嵌入式工业控制计算机和8.4〞大屏幕高分辨力彩色TFT液晶显示屏,可以提供丰富直观的信息,包括设备当前的工作状态、下一步工作提示及各种帮助信息

【AI视野·今日NLP 自然语言处理论文速览 第三十五期】Mon, 18 Sep 2023

AI视野·今日CS.NLP自然语言处理论文速览Mon,18Sep2023Totally51papers👉上期速览✈更多精彩请移步主页DailyComputationandLanguagePapers"MergeConflicts!"ExploringtheImpactsofExternalDistractorstoP

小白带你学习ceph分布式存储

目录一、概述1、分布式存储系统2、特点2、1统一存储2、2高扩展性2、3可靠性强2、4高性能二、组件1.Monitor2.OSD3.MDS4.Object5.PG6.RADOS7.Libradio8.CRUSH9.RBD10.RGW11.CephFS三、架构图1、文件上传2、文件存储前四、部署1、环境拓扑2、准备工作3

【Robotframework+python】实现http接口自动化测试

前言下周即将展开一个http接口测试的需求,刚刚完成的java类接口测试工作中,由于之前犯懒,没有提前搭建好自动化回归测试框架,以至于后期rd每修改一个bug,经常导致之前没有问题的case又产生了bug,所以需要一遍遍回归case,过程一直手工去执行,苦不堪言。所以,对于即将开始的http接口测试需求,立马花了两天时

Openresty(二十二)ngx.balance和balance_by_lua终结篇

一灰度发布铺垫①init_by_lua*init_by_luainit_by_lua_block特点:在openresty'start'、'reload'、'restart'时执行,属于'masterinit'阶段机制:nginx'master'主进程'加载配置文件'时,运行全局LuaVM级别上的参数指定的'Lua代码

操作系统备考学习 day4 (2.1.7 - 2.2.4)

操作系统备考学习day4二、进程与线程2.1进程与线程2.1.7线程的状态与转换2.2处理机调度2.2.1调度的概念、层次2.2.2进程调度的时机切换与过程调度的方式2.2.3调度器、闲逛进程2.2.4调度算法的评价指标二、进程与线程2.1进程与线程2.1.7线程的状态与转换线程的状态与转换线程的组织与控制2.2处理机

使用亚马逊云服务器在 G4 实例上运行 Android 应用程序

随着Android应用程序和游戏变得越来越丰富,其中有些甚至比PC上的软件更易于使用和娱乐,因此许多人希望能够在云上运行Android游戏或应用程序,而在EC2实例上运行Android的解决方案可以让开发人员更轻松地测试和运行Android应用程序。在这篇博客文章中,我们将展示如何使用NICEDCV在Anbox中运行A

【JDK 8-Lambda】3.1 Java高级核心玩转 JDK8 Lambda 表达式

一、什么是函数式编程?二、什么是lambda表达式?1.先看两个示例A.【创建线程】B.【数组排序-降序】2.lambda表达式特性A.使用场景(前提):B.语法(params)->expressionC.参数列表D.方法体F.好处一、什么是函数式编程?将一个函数(也称“行为”)作为一个参数进行传递面向对象编程是对数据

【Redis】Redis 的学习教程(十一)之使用 Redis 实现分布式锁

1.分布式锁概念在多线程环境下,为了保证数据的线程安全,锁保证同一时刻,只有一个可以访问和更新共享数据。在单机系统我们可以使用synchronized锁、Lock锁保证线程安全。synchronized锁是Java提供的一种内置锁,在单个JVM进程中提供线程之间的锁定机制,控制多线程并发。只适用于单机环境下的并发控制。

热文推荐