文档章节

jar 更新部分文件

圣洁之子
 圣洁之子
发布于 08/17 15:40
字数 836
阅读 15
收藏 0
C:\Program Files (x86)\Java\jdk1.8.0_102\bin>jar -h
Illegal option: h
Usage: jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] files ...
Options:
    -c  create new archive
    -t  list table of contents for archive
    -x  extract named (or all) files from archive
    -u  update existing archive
    -v  generate verbose output on standard output
    -f  specify archive file name
    -m  include manifest information from specified manifest file
    -n  perform Pack200 normalization after creating a new archive
    -e  specify application entry point for stand-alone application 
	    bundled into an executable jar file
    -0  store only; use no ZIP compression
    -P  preserve leading '/' (absolute path) and ".." (parent directory) components from file names
    -M  do not create a manifest file for the entries
    -i  generate index information for the specified jar files
    -C  change to the specified directory and include the following file
If any file is a directory then it is processed recursively.
The manifest file name, the archive file name and the entry point name are
specified in the same order as the 'm', 'f' and 'e' flags.

Example 1: to archive two class files into an archive called classes.jar:
       jar cvf classes.jar Foo.class Bar.class
Example 2: use an existing manifest file 'mymanifest' and archive all the
           files in the foo/ directory into 'classes.jar':
       jar cvfm classes.jar mymanifest -C foo/ .


C:\Program Files (x86)\Java\jdk1.8.0_102\bin>

C:\Users\chenjo>jar -h
非法选项: h
用法: 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/ .

$ jar tvf cos-26Dec2008.jar | grep Daemon.class
  1790 Tue Nov 12 23:46:32 CST 2013 com/oreilly/servlet/Daemon.class

$ jar tvf cos-26Dec2008.jar | grep Daemon.class | awk '{print $8}'
com/oreilly/servlet/Daemon.class

$ jar tvf cos-26Dec2008.jar | grep Daemon.class | awk '{print $8}'| xargs dirname
com/oreilly/servlet

$ jar tvf cos-26Dec2008.jar | grep Daemon.class | awk '{print $8}'| xargs dirname | xargs mkdir -p

部署在 Google云里的应用突然有一个类做了修改,删除掉重新上传的话,一个jar包传上去就得等半小时,墙有点高,你懂的,所以要是能单独更新某个class文件就最棒了,方法当然是有的,如下所示。

jar tvf test.jar  | less
// OR: unzip -v test.jar | grep xxx

通过上面命令搜索出自己要更新的class文件的目录,在当前路径下建立好目录

mkdir -p  BOOT-INF/classes/net/yuxianghe/core/
cp Test.class BOOT-INF/classes/net/yuxianghe/core/

要更新的class的目录建立好了之后直接更新到jar里即可,如下命令所示:

jar -uvf test.jar  BOOT-INF/classes/net/yuxianghe/core/Test.class

到这里就做到了只更新jar包里的单个类文件

© 著作权归作者所有

圣洁之子
粉丝 10
博文 402
码字总数 124050
作品 0
深圳
后端工程师
私信 提问
eclipse 项目无法编译成功

我们公司用的是Springmvc + mybatis 框架,原本上午操作项目还能正常运行,后台页面操作也很正常,下午操作后台用户管理添加员工数据时也很正常显示,控制器里面增上改查方法正常执行,后台没...

沉淀人生
2016/10/20
0
0
Java基础系列19:使用JXL或者POI生成和解析Excel文件

一 简介 如题所示,当我们需要在Java中解析Excel文件时,可以考虑使用JXL或POI的API来解析。 二者的区别如下: jxl现在基本上没被维护了,最近一次更新时间还是几年前。相反,poi属于Apache开...

pangfc
2016/12/07
0
0
整合 Tachyon 运行 Hadoop MapReduce(译)

整合 Tachyon 运行 Hadoop MapReduce 本指南描述如何使Tachyon 与 Hadoop MapReduce 结合运行,这样你可以很容易运行 hadoop MapReduce 程序文件存储在 Tachyon上。 前提 这部分额外的首要条...

Ryan-瑞恩
2015/10/20
298
0
关于安卓工程导出带res资源文件的jar的总结

安卓项目导出成jar,自带的res资源不能正常使用,网上各说纷纭,总结一下归纳为五类,但是没有一种能够提供直接将res文件夹打包进jar,并能够使用R文件引用的方式。 打包时包含res文件夹,并...

tnjin
2014/04/17
10.5K
3
Java Web Start实践:动态生成JNLP

Java很早就推出了Java Web Start(简称JWS)技术。这一技术的初衷很好:希望将桌面程序和Web页面之间搭起一个无缝的桥梁。虽然Applet技术已经存在了十多年,但是它 日趋老迈衰落,所以JWS也就...

dodojava
2012/05/23
624
0

没有更多内容

加载失败,请刷新页面

加载更多

setState() called after dispose() flutter

# 在setState前加入以下判断if (!mounted) return;

zdglf
26分钟前
3
0
docker和docker-compose二种方式安装mysql8.0

Docker方式安装 在命令行下运行 docker run -d -p 3306:3306 --restart always --privileged=true--name mysql-e MYSQL_USER="test" -e MYSQL_PASSWORD="test" -e MYSQL_ROOT_PASSWOR......

小白的成长
34分钟前
9
0
五大网络威胁应对挑战

既然如此,那么威胁的检测和响应过程是否像生产瑞士手表那样高效运行呢?答案远非如此。据ESG报告显示,威胁检测和响应过程充满各种各样的问题。来自372名企业网络安全和IT专家的数据,以下是...

linuxCool
36分钟前
5
0
jQuery 选择器使用大全(标签选择器,ID选择器等)

jQuery的选择器是CSS 1-3,XPath的结合物。jQuery提取这二种查询语言最好的部分,融合后创造出了最终的jQuery表达式查询语言。如果你了解CSS(绝大部分WEB开发者都用到的),那么你学起来就很...

前端老手
41分钟前
4
0
HBase四种部署模式和基本操作

本文主要包括两部分的内容,第一部分主要包HBase的四种安装方法,分别是:① 单机版模式,② 伪集群模式,③ 使用HBase自带的zookeeper构建分布式集群,④ 使用独立安装的zookeeper构建分布式...

繁荣3000
49分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部