在命令行上操作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文件。

addWebDescriptorToWARFile

其他

在本文中,我重点介绍了可以从命令行对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

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

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

相关文章

C#语言使用多态(接口与override) ——帮您剔除对面向对象多态性的疑惑

多态是面向对象编程中三大机制之一,其原理建立在"从父类继承而来的子类可以转换为其父类"这个规则之上,换句话说,能用父类的地方,就能用该类的子类.当从父类派生了很多子类时,由于每个子类都有其不同的代码实现,所以当用父类来引用这些子类时,同样的操作而可以表现出…

Java如何以及为什么使用Unsafe?

总览 sun.misc.Unsafe至少在Java 1.4(2004)中就已经存在于Java中。 在Java 9中,不安全将与许多其他供内部使用的类一起隐藏。 以提高JVM的可维护性。 尽管仍不确定究竟将取代Unsafe到底是什么,但我怀疑将取代Unsafe不仅仅是一件事…

Angularjs基础(三)

AngularJS ng-model 指令     ng-model 指令用于绑定应用程序数据到HTML 控制器&#xff08;input,select,textarea&#xff09;的值ng-model指令     ng-model指令可以将输入域的值与AngularJS 创建的变量绑定。       实例&#xff1a;         <di…

ASP.NET MVC的生命周期与网址路由

网址路由&#xff08;Routing&#xff09;在ASP.NET MVC中有两个主要用途&#xff0c;一个用途是匹配通过浏览器传来的HTTP请求&#xff0c;另一个用途则是将适当的网址返回浏览器。 首先我们来看下第一个用途&#xff0c;也就是匹配通过浏览器传来的HTTP请求。 客户端对ASP.NE…

ecshop分页类assign_pager分析和扩展

ecshop分页类assign_pager分析和扩展,我们前面的文章中介绍过ecshop ajax分页&#xff0c;他的基础都是简单单一的分页。如果我们要在ecshop分页里面传入自己的参数&#xff0c;你就必须对ecshop的assign_pager分页函数进行系统的认识和分析。 首先我们看category.php的ecshop分…

NEC css规范

CSS规范 - 分类方法 SS文件的分类和引用顺序 通常&#xff0c;一个项目我们只引用一个CSS&#xff0c;但是对于较大的项目&#xff0c;我们需要把CSS文件进行分类。 我们按照CSS的性质和用途&#xff0c;将CSS文件分成“公共型样式”、“特殊型样式”、“皮肤型样式”&#…

JDK 8中的流驱动的集合功能

这篇文章介绍了JDK 8的应用–引入了带有集合的 流 &#xff0c;以更简洁地完成通常需要的与集合相关的功能。 在此过程中&#xff0c;将演示并简要说明使用Java Streams的几个关键方面。 请注意&#xff0c;尽管JDK 8 Streams通过并行化支持提供了潜在的性能优势&#xff0c;但…

知识汇集

Oracle中锁介绍&#xff1a;http://space.itpub.net/26961876/viewspace-731300转载于:https://www.cnblogs.com/yaohonv/archive/2012/08/18/tech-col.html

jquery mobile 移动web(5)

有序列表   <div data-role"content">     <ol data-role"listview" data-theme"g">       <li><a href"#"> List 1</a></li>       <li><a href"#"> L…

cjmx:JConsole的命令行版本

当监视正在运行的Java应用程序时&#xff0c;JConsole是一个很好的工具。 但是&#xff0c;当无法使用JConsole直接连接到JVM&#xff08;例如&#xff0c;由于网络限制&#xff09;并且无法进行SSH隧道传输时&#xff0c;那么拥有命令行版本的JConsole会很棒。 jcmx是JConsol…

Android中SQLiteDatabase操作【附源码】

像我们做的很多应用程序及网站一样&#xff0c;基本都是对数据库进行增删改查来实现相应的功能。那么Android开发也一样&#xff0c;不过由于在移动客户端应用&#xff0c;所以不会像sql server、mysql那么复杂&#xff0c;Android应用程序支持本地数据库&#xff0c;SQLiteDat…

移动设备HTML5页面布局

在HTML5标准添加的新元素中&#xff0c;用于常见页面结 构的包括header footer footer nav aside aside article section hgroup 。 下面简单介绍一下这个元素&#xff1a; 1.header header>元素定义文档的页面组合&#xff0c;通 常是一些引导和导航信息&#xff0c;标签…

Hazelcast入门指南第5部分

这是我撰写的有关Hazelcast的一系列文章的延续。 我强烈建议您阅读其他内容&#xff1a; 第1 部分 &#xff0c; 第2 部分 &#xff0c; 第3 部分和第4部分 。 让人一见倾心的东西&#xff1f; 这篇文章中将没有Hazelcast专用代码。 让我重复一遍。 这篇文章中将没有Hazelcast…

【BEV感知算法概述——下一代自动驾驶感知算法】

文章目录 BEV感知算法概念BEV感知算法数据集介绍BEV感知算法分类BEV感知算法的优劣小结 BEV感知算法概念 Bird’s-Eye-View&#xff0c;鸟瞰图&#xff08;俯视图&#xff09;。BEV感知算法存在许多的优势。 首先&#xff0c;BEV视图存在遮挡小的优点&#xff0c;由于视觉的透…

jquery鼠标事件

click()   为点击事件绑定一个事件处理函数&#xff0c;或者触发元素点击事件。   .click( handler(eventObject) )     handler(eventObject)       每次事件触发时候执行的函数。   .click([eventData],handler(eventObject))     eventData      …

[LaunchPad] 超声波测试,数码管显示

1 #include "io430g2553.h"2 3 unsigned char Disp_Tab[] {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //段码控制 4 unsigned char dispbit[8]{0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F}; //位选控制 5 6 unsigned char LedOut[4];7 8 …

Spring的依赖注入陷阱

Spring框架中有三种注入变量&#xff1a; 基于二传手的注射 基于构造函数的注入 基于现场的注入 这些机制中的每一种都有优点和缺点&#xff0c;并且不仅只有一种正确的方法。 例如现场注入&#xff1a; Autowired private FooBean fooBean;在生产代码中使用它通常不是最好…

jquery 操作css 选择器

.addClass()   为每个匹配的元素添加指定的样式类名   .addClass(className)     className 为每个匹配元素所有增加的一个或多个样式名   .addClass(function(index,currentClass))     函数返回一个或者多个用空格隔开&#xff0c; index 表示参数匹配中的索引…

vim设置

一、基本编辑功能1、复制、剪切和粘贴复制特定的某一段&#xff1a;把光标移到要复制的文本的头部&#xff0c;按下“v”&#xff0c;往后移动光标&#xff0c;光标所过之处的字符>都会高亮&#xff0c;移到欲复制文本的尾部后&#xff0c;按下“y”&#xff0c;高亮文本全部…

jquery表单属性筛选元素

$(":button") 选择所有按钮元素类型为按钮的元素。 等于$(input[type"button"]) $(":checkbox") 选择所有类型为复选框的元素。 等于$(input[type"checkbox"]) $(":checked") 选择所有勾选的元素。 $( "input:checked&…