jar 、war、ear_在命令行上操作JAR,WAR和EAR

jar 、war、ear

尽管Java IDE和许多图形工具使查看和操作Java归档文件(JAR,WAR和EAR)文件的内容比以往更加容易,但有时我还是更喜欢使用命令行jar命令来完成这些任务。 当我必须重复做某事或作为脚本的一部分来做时,尤其如此。 在本文中,我将研究如何使用jar命令来创建,查看和操作Java归档文件。

JAR文件将主要在本文中使用,但我在.jar文件上演示的命令与.war.ear文件一致。 还要记住, JAR格式基于ZIP格式,因此可用于处理ZIP文件的众多工具可以应用于JAR,WAR和EAR文件。 还应记住, jar选项倾向于镜像tar的选项 。

对于我的示例,我想打包并使用一些.class文件。 下一个屏幕快照演示将一些Java源代码文件( .java文件)编译为.class文件。 这些文件的实际来源对于本次讨论无关紧要,此处未显示。 在本文中,我已经展示了在没有IDE的情况下进行编译,这与使用命令行工具保持一致。

准备要在

compilingSourceCodeToBeJarred

下一个屏幕快照显示了我的.class文件已被编译并准备好包含在JAR中。

directoryListingOfCompiledClassesToBeJarred

创建一个JAR文件

jar命令提供的“ c ”选项指示它创建档案 。 我喜欢在我运行的所有jar命令中使用“ v ”(详细)和“ f ”(文件名)选项,以便输出是详细的(以帮助您了解正在发生的事情,并且它是正在发生的正确事情)因此,可以根据命令的输入提供适用的JAR / WAR / EAR文件名,而不是根据标准输入和标准输出来输入或输出。 在创建JAR文件的情况下,选项“ cvf”将创建具有指定名称( f )的JAR文件( c )并打印出有关此创建的详细输出( v )。

下一个屏幕快照展示了jar cvf的最简单用法。 我将当前目录更改为“ classes”目录,因此创建JAR就像运行jar cvf *jar cvf .一样简单jar cvf . 并且当前目录中的所有文件以及所有子目录和子目录中的文件将包含在创建的JAR文件中。 下一个屏幕快照中演示了此过程。

creationJarOfClassesWithCvfNoC

如果我不想在运行jar之前将当前目录显式更改为构建JAR的最合适的目录,则可以使用-C选项指示jar在其创建过程中隐式地执行此操作。 下一个屏幕快照对此进行了演示。

creationJarOfClassesWithCvfC

列出档案的内容

列出(或查看) JAR,WAR或EAR文件的内容可能是我使用jar命令最常执行的功能。 为此,我通常使用选项“ t ”(列出存档的内容),“ v ”(详细)和“ f ”(在命令行上指定的文件名)。 下一个屏幕快照演示了如何运行jar tvf MyClasses.jar来查看我生成的JAR文件的内容。

listingMyClassesJarContentsWithTvf

提取存档文件的内容

有时需要提取存档文件中包含的一个或多个文件,以处理或查看这些单个文件的内容。 这是通过jarx ”(用于提取)选项完成的。 下一个屏幕快照演示了如何使用jar xvf MyClasses.jar提取该JAR文件的所有内容。 请注意,原始的JAR文件保持不变,但现在也可以直接使用其内容。

extractingAllContentsMyClassesJar

我通常只需要查看或使用存档文件的一个或两个文件。 尽管我可以绝对地提取所有文件,如上一个示例所示,并且仅编辑需要编辑的文件,但是如果文件数量很少,我更喜欢仅提取需要的文件。 使用相同的jar xvf命令可以轻松完成此操作。 通过指定完全限定的文件以在命令中的存档文件名之后显式提取,我可以指示

仅提取那些特定文件。 这是有优势的,因为我不会在目录中填入我不关心的文件,并且在完成后也不必担心清理太多。 下一个屏幕快照演示了运行情况
jar xvf MyClasses.jar dustin/examples/jar/GrandParent.class仅提取jar xvf MyClasses.jar dustin/examples/jar/GrandParent.class单个类定义,而不提取该JAR中的所有文件。

extractingSingleFileMyClassesJar

更新档案文件

先前的示例演示了如何为jar命令提供“ c”来创建档案,“ t”来列出档案的内容,以及“ x”来提取档案的内容。 另一个通常执行的功能是更新现有档案的内容 ,这是通过jar的“ u ”选项完成的。 下一个屏幕快照演示了如何在DOS中使用copy con命令创建一个名为tempfile.txt的文本文件,然后使用jar uvf MyClasses.jar tempfile.txt更新MyClasses.jar并将tempfile.txt添加到该JAR。

添加CreatedTextFileToJarWithUvf

如果要更新现有存档中的文件,可以使用jar xvf提取该文件,根据需要修改该文件,然后使用jar uvf命令将其放回原始JAR中。 新文件将覆盖同名的现有文件。 下一个屏幕快照对此进行了模拟。

overwritingCreatedTextFileToJarWithUvf

从存档文件中删除条目

在阅读jar手册页 , jar的Oracle工具描述或jar的Java Tutorials覆盖范围时,看不到从Java归档文件中删除条目的选项,这也许有些令人惊讶。 实现此目的的一种方法是提取JAR的内容,删除不再需要的文件,并从已删除这些文件的目录中重新创建JAR。 但是,一种更简单的方法是简单地利用基于ZIP的Java归档并使用基于ZIP的工具的删除功能。

下一个屏幕快照将演示使用的7-Zip(在Windows上)删除tempfile.txtMyClasses.jar运行命令7z d MyClasses.jar tempfile.txt 。 请注意,使用zip -d MyClasses.jar tempfile.txt可以在Linux中完成相同的操作。 其他ZIP支持工具也有自己的选择。

removeJarEntryWith7ZipDoption

WAR和EAR文件

这篇文章中的所有示例都针对JAR文件,但是这些示例适用于WAR和EAR文件。 作为一个非常简单的示例,下一个屏幕快照演示了如何使用jar uvf使用新的Web描述符更新WAR文件。 对于本例而言,涉及的实际文件的内容无关紧要。 需要注意的重要一点是,可以以与JAR文件完全相同的方式来操纵WAR文件。 这也适用于EAR文件。

添加WebDescriptorToWARFile

其他

在本文中,我重点介绍了可从命令行对Java存档文件执行的“ CRUD”操作(创建/读取/更新/删除)和提取。 我通常将适用的“ CRUD”操作命令(“ c”,“ t”,“ u”)或提取命令(“ x”)与常用选项“ v”(详细)和“ f”(Java)结合使用在命令行上明确指定的存档文件名)。 jar命令支持除这些操作以外的其他操作,例如“ M”(控制清单文件的创建)和“ 0”(控制压缩)。 我也没有演示使用“ i”为Java档案生成索引信息。

有关使用Java存档的其他资源

我之前引用了这些内容,但为方便起见在此进行了总结。

  • Java教程:JAR文件中的打包程序
  • jar命令上的Oracle工具文档
  • 罐子男人佩奇

结论

jar命令相对易于使用,在某些情况下可以是创建,查看和修改Java归档文件内容的最快方法。 熟悉此命令行工具可以使Java开发人员不时得到回报,尤其是在执行高度重复的任务或涉及脚本的任务时。 IDE和工具(特别是构建工具)在Java存档文件操作方面可以提供很多帮助,但是有时这些“开销”要比从命令行使用jar时所需的开销大得多。

翻译自: https://www.javacodegeeks.com/2014/12/manipulating-jars-wars-and-ears-on-the-command-line.html

jar 、war、ear

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/338697.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言 | 读写文件

C语言怎样向文件读写字符fgetc函数调用形式:fgetc(fp) 功能:从fp指向的文件读入一个字符。 返回值:读成功,带回所读的字符,失败则返回文件结束标志EOF(即-1)。fputc函数调…

哨兵系列卫星_空客“哥白尼哨兵-1C”卫星雷达天线首次展开双翼

【民航事儿】2020年8月11日,腓特烈港:通过模拟零重力环境并固定在特殊装置上,哥白尼哨兵-1C卫星的12.3米宽、860公斤重的合成孔径雷达(SAR)的雷达天线,首次成功的在位于德国腓特烈港的空中客车综合技术中心展开双翼。作为哨兵-1系…

oracle vm 环境支持,使用 Oracle VM 模板快速部署 Oracle RAC 环境

6. 实时监控部署状态日志[rootracnode1 racovm]# cat /tmp/progress-racovm.out2014-04-16 03:02:27:[buildcluster:Start:racnode1] Building 11gR2 RAC Cluster2014-04-16 03:02:27:[setsshroot:Start:racnode1] SSH Setup for the root user…2014-04-16 03:02:39:[setsshro…

java 字段构造函数_依赖注入–字段vs构造函数vs方法

java 字段构造函数嗨,今天,我想简短地讨论将依赖项注入您的类的不同方式。 通常,您有以下三种注射方法 直接进入字段/属性 通过显式的setter方法 通过显式的构造函数参数 现场注入 这种类型的注入为将所需的依赖项注入到类中提供了某种反…

C语言中return、break用法和区别

1returnreturn:跳出当前正在执行函数。使用方法:return (表达式);其中,(表达式)是可以省略的。 1.有返回类型return通常都是带有返回类型的,比如返回int型变量:int Fun(v…

兴趣点推荐代码_如何解读霍兰德职业兴趣测评结果?

霍兰德职业兴趣测评不难,难的是如何解读测评结果,这才是生涯规划测评中最重要的部分。今天我们就来说说霍兰德职业兴趣测评的结果应该如何解读。兴趣测评的结果是六种类型得分最高的三个代码依次排列组合而成,所以基本上就是R-实用型、I-研究…

linux mint 18支持安卓编译,Linux mint 18版本开启SSH服务

linux mint 18版本默认是没有安装ssh server的需要手动安装安装ssh server:此命令需要联网,会自动下载安装安装之后看是否开始了ssh,看到ssh-agent 和sshd 说明ssh server 已经启动了如果没看到ssh server 需要手动启动需要/etc/init.d/ssh s…

jcg q8 固件_JCG学院开设了Java设计模式课程!

jcg q8 固件自从我们推出JCG学院以来,已经有一段时间了。JCG学院是一个基于付费内容的高级订阅网站,提供有关最新,最先进技术的一系列课程,从RedSQL数据库(如Redis和CouchDB)到Android移动开发。 当然&…

C语言520心形表白,初学者福利!!

C语言实现打印出心形,初学者的表白神器。解题思路:这道例题我分了4部分,前3行一部分,4-6行一部分,7-13行一部分,最后一行一部分,读者请仔细阅读注释,小林写的很详细了。前三行输出&a…

python转型工资_【一点资讯】一个月完成转型!学会风变python到底有多值钱? www.yidianzixun.com...

入职新公司已经有半个月的时间了,现在想起来就在不久前还因为进退两难的工作、不喜欢的人际氛围和薪水少得可怜的工作发愁,就觉得和做了个梦一样神奇。一切的改变都因为学习风变python,一个月成功转型跳槽,并且还实现了薪资翻倍&a…

kali linux 2019教程,[教程]KALI LINUX 2.0 2019 更新国内源

2019年最新版本KALI 为 KALI 2019.1 下载地址:https://www.kali.org/downloads/有的新入门的朋友可能会问,为什么每次都无法手动更新 例如:Update命令的执行失败?其实系统是没有问题的,因为KALI自带的更新源是国外的。因国内延迟高&#xff0…

C | 构成和编码规范

C 的构成1.一个C 程序可以由一个程序单位或多个程序单位构成,每个程序单位为一个文件,编译过程中会对每个文件进行编译。2.每个程序文件包括:预处理命令、全局声明、函数,其中预处理命令就是程序开头的那行;全局声明则是在函数外进行的声明&a…

jersey mvc_如何将Jersey集成到Spring MVC应用程序中

jersey mvc我最近开始使用Java为Podcastpedia.org和JAX-RS实现构建公共的REST API,我选择了Jersey ,因为我发现它“自然”且功能强大-您可以通过遵循教程了解更多信息-带有Jersey和Spring的Java中的REST API设计和实现。 由于Podcastpedia.org是由Spring…

涡轮流量计说明书_实际应用中超声波流量计与电磁流量计哪个更好用

流量仪表是水务、石化等行业的重要仪器之一,可以用计量的眼睛来比喻。对于水务水利行业,更是具有特殊的意义。比如供水行业中的药剂的添加,如果相关的计量仪表精度不高,将直接影响到水质的优差,甚至会影响到用户人群的…

C语言数据类型转换(自动类型转换 强制类型转换)

数据类型转换就是将数据(变量、数值、表达式的结果等)从一种类型转换为另一种类型。自动类型转换自动类型转换就是编译器默默地、隐式地、偷偷地进行的数据类型转换,这种转换不需要程序员干预,会自动发生。1) 将一种类型的数据赋值…

observable_在Completablefuture和Observable之间转换

observableJava 8中的CompletableFuture<T>是对T类型的值将来将可用的承诺的高级抽象。 Observable<T>非常相似&#xff0c;但是它承诺将来会出现任意数量的项&#xff0c;从0到无穷大。 异步结果的这两种表示形式与仅使用一项即可使用Observable而不是Completable…

python idle使用anaconda中库怎么用_如何使用Anaconda学习Python

要学习Python进行数据分析&#xff0c;需要先安装Anaconda和Jupyter Notebook关于Anaconda1、为什么要用Anaconda&#xff1f;1)Anaconda自带常用数据科学包&#xff0c;你可以立即开始处理数据2)conda可帮助更好的安装和整理第三方包3)Conda可帮助你为不同的项目建立不同的运行…

C 为什么非要引入那几种类型转换?

为什么要引入这几种类型转换&#xff0c;它与C语言中的强制类型转换有什么区别&#xff1f;这四种类型转换分别应用在什么场景&#xff1f;C 为什么要引入这几种强制类型转换&#xff1f;我们都知道C 完全兼容C语言&#xff0c;C语言的转换方式很简单&#xff0c;可以在任意类型…

删除一个程序Linux,一天一个Linux基础命令删除文件或目录命令rm

rm删除文件命令1、命令格式rm [options] file...2、命令功能rm命令&#xff0c;删除文件命令&#xff0c;是Linux系统下常用命令&#xff0c;该命令的功能为删除一个文件或者整个目录或者目录中的部分文件&#xff0c;它也可以将某个目录及其下的所有文件及子目录均删除。对于…

C语言笔试两题,有坑

题目一最近遇到的一个华为笔试题题目&#xff1a;对字符串中的所有单词进行倒排。说明&#xff1a;1、构成单词的字符只有26个大写或小写英文字母&#xff1b;2、非构成单词的字符均视为单词间隔符&#xff1b;3、要求倒排后的单词间隔符以一个空格表示&#xff1b;如果原字符串…