Java使用命令行操作JAR、WAR和EAR文件

澳门新葡亰手机版 7

尽管有java
ide和大量的图形工具能是你更容易地去查看和处理Java归档文件(JAR,WAR,和EAR)。但有时候我想使用jar的命令行命令去完成这些操作。当我不得不做些重复的任务或者这些任务只是脚本的一部分时,使用命令行命令特别适合。在这篇文章里,我着重使用jar命令去创建,查看和处理Java归档文件。

【转】jar包和war包的介绍和区别,jarwar包

JavaSE程序可以打包成Jar包(J其实可以理解为Java了),而JavaWeb程序可以打包成war包(w其实可以理解为Web了)。然后把war发布到Tomcat的webapps目录下,Tomcat会在启动时自动解压war包。

JAR(Java Archive,Java
归档文件)是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。为
J2EE 应用程序创建的 JAR 文件是 EAR 文件(企业 JAR 文件)。

JAR 文件格式以流行的 ZIP 文件格式为基础。与 ZIP 文件不同的是,JAR
文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被像编译器和
JVM 这样的工具直接使用。在 JAR 中包含特殊的文件,如 manifests
和部署描述符,用来指示工具如何处理特定的 JAR。

 

如果一个Web应用程序的目录和文件非常多,那么将这个Web应用程序部署到另一台机器上,就不是很方便了,我们可以将Web应用程序打包成Web
归档(WAR)文件,这个过程和把Java类文件打包成JAR文件的过程类似。利用WAR文件,可以把Servlet类文件和相关的资源集中在一起进行发布。在这个过程中,Web应用程序就不是按照目录层次结构来进行部署了,而是把WAR文件作为部署单元来使用。

一个WAR文件就是一个Web应用程序,建立WAR文件,就是把整个Web应用程序(不包括Web应用程序层次结构的根目录)压缩起来,指定一个.war扩展名。下面我们将第2章的Web应用程序打包成WAR文件,然后发布

要注意的是,虽然WAR文件和JAR文件的文件格式是一样的,并且都是使用jar命令来创建,但就其应用来说,WAR文件和JAR文件是有根本区别的。JAR文件的目的是把类和相关的资源封装到压缩的归档文件中,而对于WAR文件来说,一个WAR文件代表了一个Web应用程序,它可以包含
Servlet、HTML页面、Java类、图像文件,以及组成Web应用程序的其他资源,而不仅仅是类的归档文件。

我们什么时候应该使用WAR文件呢?在开发阶段不适合使用WAR文件,因为在开发阶段,经常需要添加或删除Web应用程序的内容,更新
Servlet类文件,而每一次改动后,重新建立WAR文件将是一件浪费时间的事情。在产品发布阶段,使用WAR文件是比较合适的,因为在这个时候,几乎不需要再做什么改动了。

在开发阶段,我们通常将Servlet源文件放到Web应用程序目录的src子目录下,以便和Web资源文件区分。在建立WAR文件时,只需要将src目录从Web应用程序目录中移走,就可以打包了

JavaSE程序可以打包成Jar包(J其实可以理解为Java了),而JavaWeb程序可以打包成war包(w其实可以理解为…

这篇文章主要使用JAR文件作为例子,但这些我展示的命令同样适用于.war和.ear文件。我们需要记住,JAR格式是基于ZIP格式的,所以很多处理ZIP文件的工具都适用于JAR,WAR,和EAR文件。同样需要记住的是jar选项类似于tar的选项。

在我的例子里,我打算去用jar归档和处理一些.class文件。下面的屏幕快照展示了编译一些java源代码文件(.Java文件)为.class文件。这些文件的实际源码和这次讨论的内容关系不大,所以不在这展示了。我已经在这篇文章里展示了不用IDE直接使用命令行工具来编译这些文件。

准备一些文件在jar这个例子里使用。

澳门新葡亰手机版 1

下一张屏幕快照展示了我的.class文件已经被编译了 并等待着被打包。

澳门新葡亰手机版 2

创建一个JAR文件

澳门新葡亰手机版,jar命令的“c”选项用来创建一个归档。在我运行的所有jar命令中,我喜欢使用“v”(verbose)和“f”(filename)选项。目的是输出更多的信息(帮助看到事情的经过和一些正确的过程)和作为命令的一部分提供适当的JAR/WAR/EAR文件名而不是在标准输入输出里提供。在创建一个JAR文件时,使用“cvf”选项会创建一个指定名称(f)的JAR文件并打印出详细情况,不过是创建成功。

下一个屏幕快照展示了一个使用jar
cvf的简单例子。我进把我的目录切换到“classes”目录下,目的是使创建一个JAR跟运行jar
cvf或者 jar
cvf一样简单。所有在当前目录下的文件和子目录下的文件都会被打包为JAR文件。这个过程在下个屏幕快照展示。

澳门新葡亰手机版 3

如果我不想在运行jar命令时明确地切换我的当前目录到最合适的目录,我可以使用-c选项指示jar命令明确地去做到上面的效果。

澳门新葡亰手机版 4

列出归档的内容

列出(或者查看)一个JAR,WAR,或者EAR文件的内容可能是我最想使用的jar命令功能。我通常使用选项“t”(列出归档内容),“v”(verbose)和“f”(在命令行指定文件名)来列出文件内容。下一个屏幕快照展示了运行命令
jar tvf MyClasses.jar去查看我生成的JAR文件的内容。

澳门新葡亰手机版 5

提取归档文件的内容

有时候想在一个归档文件里提取出一个或者多个文件来使用或者单独查看这些文件的内容。使用jar命令的“x”(用来提取)选项就可以做到。下一个屏幕快照展示了使用命令
jar xvf MyClasses.jar
去提出JAR文件的所有内容。注意,原始的JAR文件原封不动,但是,现在它的内容全都可以直接获取到。

澳门新葡亰手机版 6

我有时仅仅需要去查看获取使用归档文件中的一个或者两个文件。尽管我可以明确地把它们全都提取出来编辑我需要编辑的文件,就像在上面那个例子展示的一样。但是我想仅仅去提取我需要的少量文件。使用命令jar
xvf命令就可以轻松做到。通过在文件名后指定特定的权限定名,我可以仅提取出我指定的文件。这有一个好处:我不用被我不需要的文件占满了我的目录并且在我完事后不需要费心去清理无用文件。下一个屏幕快照展示了运行命令jar
xvf MyClasses.jar
dustin/examples/jar/GrandParent.class去提取一个单一的文件,而不是提取全部文件。

澳门新葡亰手机版 7