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手册页jarOracle工具描述jarJava 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存档的其他资源

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

结论

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值