MyEclipse6Java开发中文教程 import javax. ejb @Stateless public class HelloWorldSessionBean implements mypackage. HelloWorldSessionLocal 简化了EJB软件开发。现在进行EJB的开发只需很少的类和接口您不再需要EJB组 件的Home接口和对象接口,因为现在容器负责公开必要的方法。您只需提供业务接口 您可以使用标注来声明EJB组件,并且通过容器来管理事务 不再需要部署描述符。您可以在类中直接使用标注,为容器提供以前在部署描述符中定 义的依赖关系和配置信息。如果没有任何特殊说明,容器将使用缺省规则来处理最常见的情 查找简单。您可以通过 EJBContext直接在类中查找JND|名称空间中的对象。 简化了对象关系映射。新的Java持久性AP|允许您使用POJO中的标注将Java 对象映射到关系数据库,从而使对象关系映射变得更简单透明 使用依赖关系注入来访问资源 对象可以使用标注直接请求外部资源 使用@ Resource标注或针对一些专用资源的@EJB和@ Web serviceRef标注 可以注入以下资源 Session Context对象 Data Sources对象 Entity Manager接口 其他 Enterprise Beans Web服务 消息队列和主题 资源适配器的连接工厂 Java持久性AP|模型 不仅用于 Java ee服务器环境,也可用于 Java se和Web层 无缝集成替换 Hibernate, TopLink等ORM框架 使用标注开发JDK5 or later)) 实体是POJO 标准化的对象关系映射 命名查询 简单的打包规则 分离的实体 Entity Manager API 实体是PoJO。与使用容器管理持久性( Container- Managed Persistence,cMP) 的EJB组件不同,使用新AP的实体对象不再是组件,并且它们不再需要位于EJB 模块中。 标准化的对象关系映射。新规范将对对象关系映射的处理方式进行标准化,从而使 开发者不再需要了解特定于供应商的策略。Java持久性AP|使用标注来指定对象关 系映射信息,但它仍支持XML描述符。 命名査询。现在命名査询是用元数据表示的静态查询。查询可以是Java持久性 AP查询或本地査询。这样会使重用查询变得非常简单。 简单的打包规则。由于实体Bean是简单的Java技术类,因此几乎可以在Java 刘长炯著
MyEclipse 6 Java 开发中文教程 6 刘长炯著 import javax.ejb.*; @Stateless public class HelloWorldSessionBean implements mypackage.HelloWorldSessionLocal { } 简化了 EJB 软件开发。现在进行 EJB 的开发只需很少的类和接口。您不再需要 EJB 组 件的 Home 接口和对象接口,因为现在容器负责公开必要的方法。您只需提供业务接口。 您可以使用标注来声明 EJB 组件,并且通过容器来管理事务。 不再需要部署描述符。您可以在类中直接使用标注,为容器提供以前在部署描述符中定 义的依赖关系和配置信息。如果没有任何特殊说明,容器将使用缺省规则来处理最常见的情 况。 查找简单。您可以通过 EJBContext 直接在类中查找 JNDI 名称空间中的对象。 简化了对象关系映射。新的 Java 持久性 API 允许您使用 POJO 中的标注将 Java 对象映射到关系数据库,从而使对象关系映射变得更简单透明。 使用依赖关系注入来访问资源: 对象可以使用标注直接请求外部资源 使用 @Resource 标注或针对一些专用资源的 @EJB 和 @WebServiceRef 标注 可以注入以下资源: SessionContext 对象 DataSources 对象 EntityManager 接口 其他 Enterprise Beans Web 服务 消息队列和主题 资源适配器的连接工厂 Java 持久性 API 模型 不仅用于 Java EE 服务器环境,也可用于 Java SE 和 Web 层 无缝集成/替换 Hibernate, TopLink 等 ORM 框架 使用标注开发(JDK 5 or later) 实体是 POJO 标准化的对象关系映射 命名查询 简单的打包规则 分离的实体 EntityManager API 实体是 POJO。与使用容器管理持久性 (Container-Managed Persistence, CMP) 的 EJB 组件不同,使用新 API 的实体对象不再是组件,并且它们不再需要位于 EJB 模块中。 标准化的对象关系映射。新规范将对对象关系映射的处理方式进行标准化,从而使 开发者不再需要了解特定于供应商的策略。Java 持久性 API 使用标注来指定对象关 系映射信息,但它仍支持 XML 描述符。 命名查询。现在命名查询是用元数据表示的静态查询。查询可以是 Java 持久性 API 查询或本地查询。这样会使重用查询变得非常简单。 简单的打包规则。由于实体 Bean 是简单的 Java 技术类,因此几乎可以在 Java
MyEclipse6Java开发中文教程 EE应用程序中的任意位置将其打包。例如,实体Bean可以是 EJB JAR、应用程序 客户端JAR、WEB-NFb、 WEB-INF/ classes的一部分,甚至是企业应用程序归档 Enterprise Application Archive,EAR)文件中实用程序JAR的一部分。通过这些简单 的打包规则,您不再需要创建EAR文件以使用来自Web应用程序或应用程序客户 端的实体Bean 分离的实体。由于实体Bean是POJO,因此可以对它们执行序列化,通过网络 将其发送到其他地址空间,并在不识别持久性的环境中使用它们。这样,您就不再需要 使用数据传输对象( Data Transfer Object,DTO Entity Manager API。现在,应用程序编程人员可以使用标准 Entity Manager API 来执行涉及实体的创建、读取、更新和删除( reate Read Update Delete,cRUD)操 作, Web服务 使用标注显著改进和简化了Web服务支持 JDK6直接内置简化对 Web service的支持 JAX-WS 2.0 JAX-WS20是 Java ee5平台中用于Web服务的新APl JA-Ws20保留了自然的RPC编程模型,同时在以下几个方面进行了改 进:数据绑定、协议和传输的独立性、对Web服务的REST样式的支持 以及易开发性。 异步Web服务 在轮询模型中,发出调用。准备就绪后,请求结果。 在回调模型中,注册处理程序。在响应到达后,立即向您发出通知。 关于Web服务的这些内容,我们已经在上一章做了探讨 1613 Java ee打包和发布 刚刚接触到 Java ee开发的读者,常常为Java中名目繁多的打包文件感到晕眩。常见 的有JAR,WAR,RAR,EAR,其实所有这些文件的格式都是ZP格式的,可以使用Wnz|P 或者 WinRAR等软件打开,当然也能用它们来创建。还可以用JDK自带的JAR工具或者 开发工具例如 Eclipse来创建JAR。 16131JAR文件 JAR文件, Java archive,Java档案文件。详细内容可以参考文末的资料JAR文件 揭密。JAR文件格式以流行的Z|P文件格式为基础,用于将许多个文件聚集为一个文件。 我们可以自己制作JAR文件,将编译输出的类文件按照包结构压缩即可。与ZP文件不同 的是,JAR文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可 被像编译器和JVM这样的工具直接使用。在JAR中包含特殊的文件,如 manifests和 部署描述符,用来指示工具如何处理特定的JAR。图164列出了一个常见的JAR文件的 目录结构 注意:JAR文件中的 META-INF目录(大小写不能错)不是必须的,但是大多数时候 还是加上为妙,因为笔者以前就发现在 Tomcat下以间ar文件的方式加入自己写的类的时候 没有加入此目录,结构 Tomcat竟然不识别自己写的类 刘长炯著
MyEclipse 6 Java 开发中文教程 7 刘长炯著 EE 应用程序中的任意位置将其打包。例如,实体 Bean 可以是 EJB JAR、应用程序 客户端 JAR、WEB-INF/lib、WEB-INF/classes 的一部分,甚至是企业应用程序归档 (Enterprise Application Archive, EAR) 文件中实用程序 JAR 的一部分。通过这些简单 的打包规则,您不再需要创建 EAR 文件以使用来自 Web 应用程序或应用程序客户 端的实体 Bean。 分离的实体。由于实体 Bean 是 POJO,因此可以对它们执行序列化,通过网络 将其发送到其他地址空间,并在不识别持久性的环境中使用它们。这样,您就不再需要 使用数据传输对象 (Data Transfer Object, DTO)。 EntityManager API。现在,应用程序编程人员可以使用标准 EntityManager API 来执行涉及实体的创建、读取、更新和删除 (Create Read Update Delete, CRUD) 操 作。 Web 服务 使用标注显著改进和简化了 Web 服务支持 JDK 6 直接内置/简化对 Web Service 的支持 JAX-WS 2.0 JAX-WS 2.0 是 Java EE 5 平台中用于 Web 服务的新 API。 JAX-WS 2.0 保留了自然的 RPC 编程模型,同时在以下几个方面进行了改 进:数据绑定、协议和传输的独立性、对 Web 服务的 REST 样式的支持 以及易开发性。 异步 Web 服务 在轮询模型中,发出调用。准备就绪后,请求结果。 在回调模型中,注册处理程序。在响应到达后,立即向您发出通知。 关于 Web 服务的这些内容,我们已经在上一章做了探讨。 16.1.3 Java EE 打包和发布 刚刚接触到 Java EE 开发的读者,常常为 Java 中名目繁多的打包文件感到晕眩。常见 的有 JAR,WAR,RAR,EAR,其实所有这些文件的格式都是 ZIP 格式的,可以使用 WinZIP 或者 WinRAR 等软件打开,当然也能用它们来创建。还可以用 JDK 自带的 JAR 工具或者 开发工具例如 Eclipse 来创建 JAR。 16.1.3.1 JAR 文件 JAR 文件,Java ARchive,Java 档案文件。详细内容可以参考文末的资料 JAR 文件 揭密。JAR 文件格式以流行的 ZIP 文件格式为基础,用于将许多个文件聚集为一个文件。 我们可以自己制作 JAR 文件,将编译输出的类文件按照包结构压缩即可。与 ZIP 文件不同 的是,JAR 文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可 被像编译器和 JVM 这样的工具直接使用。在 JAR 中包含特殊的文件,如 manifests 和 部署描述符,用来指示工具如何处理特定的 JAR。图 16.4 列出了一个常见的 JAR 文件的 目录结构。 注意:JAR 文件中的 META-INF 目录(大小写不能错)不是必须的,但是大多数时候 还是加上为妙,因为笔者以前就发现在 Tomcat 下以 jar 文件的方式加入自己写的类的时候, 没有加入此目录,结构 Tomcat 竟然不识别自己写的类
MyEclipse6Java开发中文教程 回国 commons1ein1.4. jar \META-IN-zP档案文件,解包大小为8156字节 a commons-logging1.0.4.jar 口 META-INF 目 LICENSE.txt 日 apache 目 NOTICE. txt MANIFEST MF -o logging 图164 ons Logging包的JAR文件结构 个JAR文件可以用于: 用于发布和使用类库 作为应用程序和扩展的构建单元 作为组件、 applet或者插件程序的部署单位 用于打包与组件相关联的辅助资源 AR文件格式提供了许多优势和功能,其中很多是传统的压缩格式如ZP或者TAR 所没有提供的。它们包括 安全性。可以对JAR文件内容加上数字化签名。这样,能够识别签名的工具就可 以有选择地为您授予软件安全特权,这是其他文件做不到的,它还可以检测代码是 否被篡改过。 减少下载时间。如果一个 applet捆绑到一个JAR文件中,那么浏览器就可以在 个HTTP事务中下载这个applet的类文件和相关的资源,而不是对每一个文件 打开一个新连接 压缩。JAR格式允许您压缩文件以提高存储效率 传输平台扩展。Java扩展框架( Java extensions framework)提供了向Java核心 平台添加功能的方法,这些扩展是用JAR文件打包的(Java3D和 JavaMail就是 由Sun开发的扩展例 包密封。存储在JAR文件中的包可以选择进行密封,以增强版本一致性和安全性。 密封一个包意味着包中的所有类都必须在同一JAR文件中找到。 包版本控制个JAR文件可以包含有关它所包含的文件的数据,如厂商和版本 信息 可移植性。处理JAR文件的机制是Java平台核心AP1的标准部分( java util. jar 包下面 META-NF目录 大多数JAR文件包含一个META-NF目录,它用于存储包和扩展的配置数据,如安 全性和版本信息。Java2平台识别并解释 META-INF目录中的下述文件和目录,以便配 置应用程序、扩展和类装载器 MANIFESTMF。这个 manifest文件定义了与扩展和包相关的数据。 NDEXLIST。这个文件由jar工具的新选项i生成,它包含在应用程序或者扩 展中定义的包的位置信息。它是 Jarlndex实现的一部分,并由类装载器用于加速 类装载过程 XXX, SF。这是JAR文件的签名文件。占位符ⅹxX标识了签名者 xxκ.DSA。与签名文件相关联的签名程序块文件,它存储了用于签名JAR文件的 公共签名。 刘长炯著
MyEclipse 6 Java 开发中文教程 8 刘长炯著 图 16.4 Commons Logging 包的 JAR 文件结构 一个 JAR 文件可以用于: • 用于发布和使用类库 • 作为应用程序和扩展的构建单元 • 作为组件、applet 或者插件程序的部署单位 • 用于打包与组件相关联的辅助资源 JAR 文件格式提供了许多优势和功能,其中很多是传统的压缩格式如 ZIP 或者 TAR 所没有提供的。它们包括: • 安全性。可以对 JAR 文件内容加上数字化签名。这样,能够识别签名的工具就可 以有选择地为您授予软件安全特权,这是其他文件做不到的,它还可以检测代码是 否被篡改过。 • 减少下载时间。 如果一个 applet 捆绑到一个 JAR 文件中,那么浏览器就可以在 一个 HTTP 事务中下载这个 applet 的类文件和相关的资源,而不是对每一个文件 打开一个新连接。 • 压缩。JAR 格式允许您压缩文件以提高存储效率。 • 传输平台扩展。 Java 扩展框架(Java Extensions Framework)提供了向 Java 核心 平台添加功能的方法,这些扩展是用 JAR 文件打包的(Java 3D 和 JavaMail 就是 由 Sun 开发的扩展例子)。 • 包密封。存储在 JAR 文件中的包可以选择进行 密封,以增强版本一致性和安全性。 密封一个包意味着包中的所有类都必须在同一 JAR 文件中找到。 • 包版本控制。一个 JAR 文件可以包含有关它所包含的文件的数据,如厂商和版本 信息。 • 可移植性。处理 JAR 文件的机制是 Java 平台核心 API 的标准部分(java.util.jar 包下面)。 META-INF 目录 大多数 JAR 文件包含一个 META-INF 目录,它用于存储包和扩展的配置数据,如安 全性和版本信息。Java 2 平台识别并解释 META-INF 目录中的下述文件和目录,以便配 置应用程序、扩展和类装载器: • MANIFEST.MF。这个 manifest 文件定义了与扩展和包相关的数据。 • INDEX.LIST。 这个文件由 jar 工具的新选项 -i 生成,它包含在应用程序或者扩 展中定义的包的位置信息。它是 JarIndex 实现的一部分,并由类装载器用于加速 类装载过程。 • xxx.SF。 这是 JAR 文件的签名文件。占位符 xxx 标识了签名者。 • xxx.DSA。 与签名文件相关联的签名程序块文件,它存储了用于签名 JAR 文件的 公共签名
MyEclipse6Java开发中文教程 jar工具 为了用JAR文件执行基本的任务,要使用作为 Java Development Kit的一部分提供 的 Java archive tool(jar工具)。用jar命令调用jar工具。下表显示了一些常见的应用: 功能 命令 用一个单独的文件创建一个JAR文件 jar cf jar-file input-file 用一个目录创建一个JAR文件 jar cf jar-file dir-name 创建一个未压缩的JAR文件 jar cfo jar-file dir-name 更新一个JAR文件 jar uf jar-file input-file. 查看一个JAR文件的内容 jar tf jar-file 提取一个JAR文件的内容 jar xf jar-file 从一个JAR文件中提取特定的文件 jar xf jar-file archived-file 运行一个打包为可执行JAR文件的应用程序 Java -ar app. jar 可执行的JAR 个可执行的jar文件是一个自包含的Java应用程序,它存储在特别配置的JAR文件 中,可以由WM直接执行它而无需事先提取文件或者设置类路径。要运行存储在非可执行 的JAR中的应用程序,必须将它加入到您的类路径中,并用名字调用应用程序的主类。但 是使用可执行的JAR文件,我们可以不用提取它或者知道主要入口点就可以运行一个应用 程序。可执行JAR有助于方便发布和执行Java应用程序 创建可执行JAR 创建一个可执行JAR很容易。首先将所有应用程序代码放到一个目录中。假设应用程序中 的主类是 com. mycompany. myapp. Sample。您要创建一个包含应用程序代码的JAR文 件并标识出主类。为此,在某个位置(不是在应用程序目录中)创建一个名为 manifest的文 件,并在其中加入以下一行 Main-Class: com mycompany. myapp. Sample 然后,像这样创建JAR文件 cmf manifest ExecutableJar jar application-dir 所要做的就是这些了-现在可以用 Java -ar执行这个JAR文件 EXecutableJar jar 个可执行的JAR必须通过 manifest文件的头引用它所需要的所有其他从属JAR。如 果使用了jar选项,那么环境变量 CLASSPATH和在命令行中指定的所有类路径都被 JWM所忽略 启动可执行JAR 既然我们已经将自己的应用程序打包到了一个名为 Executable Jar jar的可执行JAR中 了,那么我们就可以用下面的命令直接从文件启动这个应用程序 java -jar EXecutableJar jar 首先需要声明的是,并不是所有类型的Java应用程序都能打包到单独的一个JAR 文件中去。必须符合一定的条件,一个Java应用程序的所有文件才能打包到一个文件 中去。另外,JAR文件有两种,一种是有清单( manifest)文件的,一种是没有清单文件 的(这种主要用来存放Java库文件)。清单文件有许多作用,我这里只讨论那种可以使用 Java来运行JAR文件的清单文件。就是使用命令 java -jar MyJarFile」ar 刘长炯著
MyEclipse 6 Java 开发中文教程 9 刘长炯著 jar 工具 为了用 JAR 文件执行基本的任务,要使用作为 Java Development Kit 的一部分提供 的 Java Archive Tool ( jar 工具)。用 jar 命令调用 jar 工具。下表显示了一些常见的应用: 功能 命令 用一个单独的文件创建一个 JAR 文件 jar cf jar-file input-file... 用一个目录创建一个 JAR 文件 jar cf jar-file dir-name 创建一个未压缩的 JAR 文件 jar cf0 jar-file dir-name 更新一个 JAR 文件 jar uf jar-file input-file... 查看一个 JAR 文件的内容 jar tf jar-file 提取一个 JAR 文件的内容 jar xf jar-file 从一个 JAR 文件中提取特定的文件 jar xf jar-file archived-file... 运行一个打包为可执行 JAR 文件的应用程序 java -jar app.jar 可执行的 JAR 一个 可执行的 jar 文件是一个自包含的 Java 应用程序,它存储在特别配置的 JAR 文件 中,可以由 JVM 直接执行它而无需事先提取文件或者设置类路径。要运行存储在非可执行 的 JAR 中的应用程序,必须将它加入到您的类路径中,并用名字调用应用程序的主类。但 是使用可执行的 JAR 文件,我们可以不用提取它或者知道主要入口点就可以运行一个应用 程序。可执行 JAR 有助于方便发布和执行 Java 应用程序。 创建可执行 JAR 创建一个可执行 JAR 很容易。首先将所有应用程序代码放到一个目录中。假设应用程序中 的主类是 com.mycompany.myapp.Sample 。您要创建一个包含应用程序代码的 JAR 文 件并标识出主类。为此,在某个位置(不是在应用程序目录中)创建一个名为 manifest 的文 件,并在其中加入以下一行: Main-Class: com.mycompany.myapp.Sample 然后,像这样创建 JAR 文件: jar cmf manifest ExecutableJar.jar application-dir 所要做的就是这些了 -- 现在可以用 java -jar 执行这个 JAR 文件 ExecutableJar.jar。 一个可执行的 JAR 必须通过 menifest 文件的头引用它所需要的所有其他从属 JAR。如 果使用了 -jar 选项,那么环境变量 CLASSPATH 和在命令行中指定的所有类路径都被 JVM 所忽略。 启动可执行 JAR 既然我们已经将自己的应用程序打包到了一个名为 ExecutableJar.jar 的可执行 JAR 中 了,那么我们就可以用下面的命令直接从文件启动这个应用程序: java -jar ExecutableJar.jar 首先需要声明的是, 并不是所有类型的 Java 应用程序都能打包到单独的一个 JAR 文件中去。 必须符合一定的条件, 一个 Java 应用程序的所有文件才能打包到一个文件 中去。 另外, JAR 文件有两种, 一种是有清单(manifest)文件的, 一种是没有清单文件 的(这种主要用来存放 Java 库文件)。 清单文件有许多作用, 我这里只讨论那种可以使用 Java 来运行 JAR 文件的清单文件。 就是使用命令 java -jar MyJarFile.jar
MyEclipse6Java开发中文教程 可以直接运行的JAR文件。这种JAR文件的清单文件的内容如下所示 Manifest-Version: 1.0 Main-Class: Main File Created-By: Your Co 。例如,假定你的程序里面的主程序是 com abc. MainFrame,那么你的这个清单文件 的内容是: Manifest-Version: 1.0 Main-Class: com. abc. Main Frame Created-By: Abc Company 然后我想讨论一下打包到单独JAR文件的应用程序的编写需要注意的问题 程序的资源文件(如gf,·jpg,‘jpeg,* properties等等)不能使用物理路径,只 能使用相对于当前类文件的相对资源路径,只有这样才能保证打包以后程序才能找到这些 资源文件。那么,这些文件在打开的时候都要使用下列语句 URL url getClasso. getResource(String name 或者 InputStream in= getclasso getResourceAs Stream( String name) 。例如 javax swing. Imagelcon icon= new javax. swing. Imagelcon( 1. gif) 那么打包后的程序将不能找到这个图片,因为它引用了一个物理路径的图片,它应该改成 这样: javax. swing. Imagelcon new javax. swing. Imagelcon(getclasso. getResource (1.gif)) 。其它的资源文件的使用也与此相似。不过属性文件( properties)的使用,Java自动会 加载JAR文件中的属性文件,例如 Resource Bundle. getBundle(com. abc test) 那么,这个文件只要放在JAR文件目录结构下的 com/abc/test properties,Java就能 自动找到这个文件 接着我想讨论一下使用JAR工具如何来创建JAR文件,这个工具可以在 <JDK_ install HOME>bin下找到,文件名在Wn32版下为 Jar. exe,Unix下为jar.在 命令行窗口下输入jar命令,将看到下列输出: 用法:jar{ ctxulvfmOM][ar-文件[ manifest文件[C目录]文件名 选项 -c创建新的归档 列出归档内容的列表 -X展开归档中的命名的(或所有的)文件 u更新己存在的归档 V生成详细输出到标准输出上 -f指定归档文件名 -m包含来自指定的清单( manifest)文件的清单( manifest)信息 0只存储方式;未用ZP压缩格式 刘长炯著
MyEclipse 6 Java 开发中文教程 10 刘长炯著 可以直接运行的 JAR 文件。 这种 JAR 文件的清单文件的内容如下所示: Manifest-Version: 1.0 Main-Class: MainClassFile Created-By: Your Company 。 例如, 假定你的程序里面的主程序是 com.abc.MainFrame, 那么你的这个清单文件 的内容是: Manifest-Version: 1.0 Main-Class: com.abc.MainFrame Created-By: Abc Company 。 然后我想讨论一下打包到单独 JAR 文件的应用程序的编写需要注意的问题。 程序的资源文件(如*.gif, *.jpg, *.jpeg, *.properties 等等)不能使用物理路径, 只 能使用相对于当前类文件的相对资源路径, 只有这样才能保证打包以后程序才能找到这些 资源文件。 那么, 这些文件在打开的时候都要使用下列语句: URL url = getClass().getResource(String name); 或者 InputStream in = getClass().getResourceAsStream(String name); 。 例如: javax.swing.ImageIcon icon = new javax.swing.ImageIcon("1.gif"); 那么打包后的程序将不能找到这个图片, 因为它引用了一个物理路径的图片, 它应该改成 这样: javax.swing.ImageIcon icon = new javax.swing.ImageIcon(getClass().getResource("1.gif")); 。 其它的资源文件的使用也与此相似。 不过属性文件(*.properties)的使用, Java 自动会 加载 JAR 文件中的属性文件, 例如: ResourceBundle.getBundle("com.abc.test"); 那么, 这个文件只要放在 JAR 文件目录结构下的 com/abc/test.properties, Java 就能 自动找到这个文件。 接着我想讨论一下使用 JAR 工具如何来创建 JAR 文件, 这个工具可以在 <JDK_install_HOME>/bin 下找到, 文件名在 Win32 版下为 jar.exe, Unix 下为 jar. 在 命令行窗口下输入 jar 命令, 将看到下列输出: 用法:jar {ctxu}[vfm0M] [jar-文件] [manifest-文件] [-C 目录] 文件名 ... 选项: -c 创建新的归档 -t 列出归档内容的列表 -x 展开归档中的命名的(或所有的〕文件 -u 更新已存在的归档 -v 生成详细输出到标准输出上 -f 指定归档文件名 -m 包含来自指定的清单(manifest〕文件的清单(manifest〕信息 -0 只存储方式;未用 ZIP 压缩格式