Java 中文官方教程 2022 版(十三)(4)

简介: Java 中文官方教程 2022 版(十三)

Java 中文官方教程 2022 版(十三)(3)https://developer.aliyun.com/article/1486366

例如,TicTacToe JAR 文件的详细输出将类似于以下内容:

68 Thu Nov 01 20:00:40 PDT 2012 META-INF/MANIFEST.MF
   553 Mon Sep 24 21:57:48 PDT 2012 TicTacToe.class
  3708 Mon Sep 24 21:57:48 PDT 2012 TicTacToe.class
  9584 Mon Sep 24 21:57:48 PDT 2012 TicTacToe.java
     0 Mon Sep 24 21:57:48 PDT 2012 audio/
  4032 Mon Sep 24 21:57:48 PDT 2012 audio/beep.au
  2566 Mon Sep 24 21:57:48 PDT 2012 audio/ding.au
  6558 Mon Sep 24 21:57:48 PDT 2012 audio/return.au
  7834 Mon Sep 24 21:57:48 PDT 2012 audio/yahoo1.au
  7463 Mon Sep 24 21:57:48 PDT 2012 audio/yahoo2.au
   424 Mon Sep 24 21:57:48 PDT 2012 example1.html
     0 Mon Sep 24 21:57:48 PDT 2012 images/
   157 Mon Sep 24 21:57:48 PDT 2012 images/cross.gif
   158 Mon Sep 24 21:57:48 PDT 2012 images/not.gif

提取 JAR 文件内容

原文:docs.oracle.com/javase/tutorial/deployment/jar/unpack.html

用于提取 JAR 文件内容的基本命令是:

jar xf *jar-file [archived-file(s)]*

让我们看看这个命令中的选项和参数:

  • x选项表示您要从 JAR 存档中提取文件。
  • f选项表示要从命令行指定的 JAR 文件中提取文件,而不是通过 stdin。
  • jar-file参数是要从中提取文件的 JAR 文件的文件名(或路径和文件名)。
  • archived-file(s)是一个可选参数,由一个以空格分隔的文件列表组成,用于从存档中提取文件。如果没有此参数,Jar 工具将提取存档中的所有文件。

通常情况下,命令中xf选项的顺序无关紧要,但它们之间不能有空格。

在提取文件时,Jar 工具会复制所需文件并将其写入当前目录,复制文件在存档中的目录结构。原始 JAR 文件保持不变。


注意: 当提取文件时,Jar 工具将覆盖与提取文件具有相同路径名的任何现有文件。


一个示例

让我们从之前部分中使用的 TicTacToe JAR 文件中提取一些文件。回想一下,TicTacToe.jar的内容是:

META-INF/MANIFEST.MF
TicTacToe.class
TicTacToe.class
TicTacToe.java
audio/
audio/beep.au
audio/ding.au
audio/return.au
audio/yahoo1.au
audio/yahoo2.au
example1.html
images/
images/cross.gif
images/not.gif

假设您想要提取TicTacToe类文件和cross.gif图像文件。为此,您可以使用以下命令:

jar xf TicTacToe.jar TicTacToe.class images/cross.gif

这个命令做了两件事:

  • 它在当前目录中放置了TicTacToe.class的副本。
  • 如果images目录不存在,它会创建该目录,并在其中放置cross.gif的副本。

原始 TicTacToe JAR 文件保持不变。

可以以相同的方式从 JAR 文件中提取任意数量的文件。当命令没有指定要提取哪些文件时,Jar 工具将提取存档中的所有文件。例如,您可以使用以下命令提取 TicTacToe 存档中的所有文件:

jar xf TicTacToe.jar

更新 JAR 文件

原文:docs.oracle.com/javase/tutorial/deployment/jar/update.html

Jar 工具提供了一个u选项,您可以使用该选项通过修改清单或添加文件来更新现有 JAR 文件的内容。

添加文件的基本命令格式如下:

jar uf *jar-file input-file(s)*

在此命令中:

  • u选项表示您要更新现有的 JAR 文件。
  • f选项表示要更新的 JAR 文件在命令行上指定。
  • jar-file是要更新的现有 JAR 文件。
  • input-file(s)是一个用空格分隔的一个或多个要添加到 JAR 文件中的文件列表。

任何已经存在于归档中且与要添加的文件具有相同路径名的文件将被覆盖。

创建新的 JAR 文件时,您可以选择使用-C选项来指示目录更改。有关更多信息,请参阅创建 JAR 文件部分。

示例

请记住,TicTacToe.jar包含以下内容:

META-INF/MANIFEST.MF
TicTacToe.class
TicTacToe.class
TicTacToe.java
audio/
audio/beep.au
audio/ding.au
audio/return.au
audio/yahoo1.au
audio/yahoo2.au
example1.html
images/
images/cross.gif
images/not.gif

假设你想要将文件images/new.gif添加到 JAR 文件中。你可以通过在images目录的父目录中发出以下命令来实现:

jar uf TicTacToe.jar images/new.gif

修改后的 JAR 文件将具有以下目录:

META-INF/MANIFEST.MF
TicTacToe.class
TicTacToe.class
TicTacToe.java
audio/
audio/beep.au
audio/ding.au
audio/return.au
audio/yahoo1.au
audio/yahoo2.au
example1.html
images/
images/cross.gif
images/not.gif
images/new.gif

您可以在执行命令期间使用-C选项来“更改目录”。例如:

jar uf TicTacToe.jar -C images new.gif

此命令将在将new.gif添加到 JAR 文件之前切换到images目录。当new.gif添加到归档中时,images目录不会包含在new.gif的路径名中,导致目录如下所示:

META-INF/MANIFEST.MF
META-INF/MANIFEST.MF
TicTacToe.class
TicTacToe.class
TicTacToe.java
audio/
audio/beep.au
audio/ding.au
audio/return.au
audio/yahoo1.au
audio/yahoo2.au
example1.html
images/
images/cross.gif
images/not.gif
new.gif

运行 JAR 打包的软件

原文:docs.oracle.com/javase/tutorial/deployment/jar/run.html

现在您已经学会了如何创建 JAR 文件,那么您如何实际运行您打包的代码呢?考虑以下情况:

  • 您的 JAR 文件包含一个应该在浏览器中运行的小程序。
  • 您的 JAR 文件包含一个应该从命令行启动的应用程序。
  • 您的 JAR 文件包含您想要用作扩展的代码。

本节将涵盖前两种情况。教程中关于扩展机制的单独路径涵盖了 JAR 文件作为扩展的使用。

打包在 JAR 文件中的小程序

要从 HTML 文件中启动任何小程序以在浏览器中运行,您可以使用applet标签。欲了解更多信息,请参阅 Java 小程序课程。如果小程序被打包为 JAR 文件,您唯一需要做的不同之处就是使用archive参数来指定 JAR 文件的相对路径。

作为示例,使用 TicTacToe 演示小程序。在显示小程序的 HTML 文件中,applet标签可以标记如下:

<applet code=TicTacToe.class 
        width="120" height="120">
</applet>

如果 TicTacToe 演示被打包在名为TicTacToe.jar的 JAR 文件中,您可以通过添加一个archive参数修改applet标签:

<applet code=TicTacToe.class 
        archive="TicTacToe.jar"
        width="120" height="120">
</applet>

archive参数指定包含TicTacToe.class的 JAR 文件的相对路径。在此示例中,假定 JAR 文件和 HTML 文件在同一目录中。如果它们不在同一目录中,您必须在archive参数的值中包含 JAR 文件的相对路径。例如,如果 JAR 文件在 HTML 文件的下一个目录中,名为applets的目录中,那么applet标签将如下所示:

<applet code=TicTacToe.class 
        archive="applets/TicTacToe.jar"
        width="120" height="120">
</applet>

JAR 文件作为应用程序

您可以使用 Java 启动器(java命令)运行 JAR 打包的应用程序。基本命令如下:

java -jar *jar-file*

-jar标志告诉启动器应用程序以 JAR 文件格式打包。您只能指定一个 JAR 文件,其中必须包含所有特定于应用程序的代码。

在执行此命令之前,请确保运行时环境已经了解 JAR 文件中哪个类是应用程序的入口点。

要指示哪个类是应用程序的入口点,您必须向 JAR 文件的清单中添加一个Main-Class头部。该头部的格式如下:

Main-Class: *classname*

头部的数值,classname,是应用程序的入口类的名称。

欲了解更多信息,请参阅设置应用程序的入口点部分。

当在清单文件中设置了Main-Class时,您可以从命令行运行应用程序:

java -jar app.jar

要从位于另一个目录中的 JAR 文件运行应用程序,您必须指定该目录的路径:java -jar path/app.jar

与清单文件一起工作:基础知识

原文:docs.oracle.com/javase/tutorial/deployment/jar/manifestindex.html

JAR 文件支持广泛的功能,包括电子签名、版本控制、包封装等。是什么赋予了 JAR 文件这种多功能性?答案就是 JAR 文件的清单

清单是一个特殊的文件,可以包含关于打包在 JAR 文件中的文件的信息。通过调整清单包含的这些“元”信息,您可以使 JAR 文件具有各种用途。

本课程将解释清单文件的内容,并向您展示如何使用它,包括基本功能的示例:

理解默认清单

创建 JAR 文件时,会自动创建一个默认清单。本节描述了默认清单。

修改清单文件

本节向您展示了修改清单文件的基本方法。后续章节演示了您可能想要进行的具体修改。

设置应用程序的入口点

本节描述了如何在清单文件中使用Main-Class头来设置应用程序的入口点。

将类添加到 JAR 文件的类路径

本节描述了如何在清单文件中使用Class-Path头来在运行小程序或应用程序时将其他 JAR 文件中的类添加到类路径中。

设置包版本信息

本节描述了如何在清单文件中使用包版本头。

在 JAR 文件中封装包

本节描述了如何通过修改清单文件在 JAR 文件中封装包。

使用清单属性增强安全性

本节描述了如何使用清单属性来增加小程序或 Java Web 启动应用程序的安全性。

附加信息

清单格式的规范是在线 JDK 文档的一部分。

理解默认清单

原文:docs.oracle.com/javase/tutorial/deployment/jar/defman.html

当您创建一个 JAR 文件时,它会自动获得一个默认清单文件。存档中只能有一个清单文件,并且它始终具有路径名

META-INF/MANIFEST.MF

当您创建一个 JAR 文件时,默认清单文件只包含以下内容:

Manifest-Version: 1.0
Created-By: 1.7.0_06 (Oracle Corporation)

这些行显示清单条目采用“头部: 值”对的形式。头部的名称与其值之间用冒号分隔。默认清单符合清单规范的 1.0 版本,并由 JDK 的 1.7.0_06 版本创建。

清单还可以包含有关打包在存档中的其他文件的信息。清单中应记录哪些文件信息取决于您打算如何使用 JAR 文件。默认清单不假设应记录有关其他文件的哪些信息。

信息摘要不包含在默认清单中。要了解有关摘要和签名的更多信息,请参阅签署和验证 JAR 文件课程。

修改清单文件

原文:docs.oracle.com/javase/tutorial/deployment/jar/modman.html

你可以使用 m 命令行选项在创建 JAR 文件时向清单中添加自定义信息。本节描述了 m 选项。

Jar 工具会自动将一个默认清单放入你创建的任何 JAR 文件中,路径名为 META-INF/MANIFEST.MF。你可以通过修改默认清单来启用特殊的 JAR 文件功能,比如包封装。通常,修改默认清单涉及向清单中添加特定用途的头部,使得 JAR 文件能够执行特定的功能。

要修改清单,你必须首先准备一个包含你希望添加到清单中的信息的文本文件。然后,你可以使用 Jar 工具的 m 选项将文件中的信息添加到清单中。


警告: 用于创建清单的文本文件必须以新行或回车符结束。如果最后一行没有以新行或回车符结束,最后一行将无法正确解析。


基本命令格式如下:

jar cfm *jar-file manifest-addition input-file(s)*

让我们看看这个命令中使用的选项和参数:

  • c 选项表示你想要创建一个 JAR 文件。
  • m 选项表示你想要将现有文件中的信息合并到你正在创建的 JAR 文件的清单文件中。
  • f 选项表示你希望输出到一个文件(即你正在创建的 JAR 文件),而不是标准输出。
  • manifest-addition 是现有文本文件的名称(或路径和名称),其内容你希望添加到 JAR 文件清单的内容中。
  • jar-file 是你希望生成的 JAR 文件的名称。
  • input-file(s) 参数是一个用空格分隔的一个或多个文件列表,你希望将这些文件放入你的 JAR 文件中。

mf 选项必须按照相应参数的顺序排列。


注意: 清单的内容必须使用 UTF-8 编码。


本课程的其余部分演示了你可能想要对清单文件进行的具体修改。

设置应用程序的入口点

原文:docs.oracle.com/javase/tutorial/deployment/jar/appman.html

如果你有一个打包在 JAR 文件中的应用程序,你需要一种方式来指示 JAR 文件中哪个类是你的应用程序的入口点。你可以通过清单中的Main-Class头部提供这些信息,其一般形式为:

Main-Class: *classname*

值*classname*是你的应用程序的入口点类的名称。

请记住,入口点是一个具有签名为public static void main(String[] args)的方法的类。

在清单中设置了Main-Class头部后,你可以使用以下形式的java命令运行 JAR 文件:

java -jar *JAR-name*

Main-Class头部指定的类的main方法将被执行。

一个示例

当我们运行 JAR 文件时,我们希望在包MyPackage中的类MyClass中执行main方法。

我们首先创建一个名为Manifest.txt的文本文件,内容如下:

Main-Class: MyPackage.MyClass

警告: 文本文件必须以换行符或回车符结尾。如果最后一行没有以换行符或回车符结尾,它将无法正确解析。


然后我们通过输入以下命令创建一个名为MyJar.jar的 JAR 文件:

jar cfm MyJar.jar Manifest.txt MyPackage/*.class

这将创建带有以下内容的清单的 JAR 文件:

Manifest-Version: 1.0
Created-By: 1.7.0_06 (Oracle Corporation)
Main-Class: MyPackage.MyClass

当你使用以下命令运行 JAR 文件时,MyClassmain方法将被执行:

java -jar MyJar.jar

使用 JAR 工具设置入口点

‘e’标志(代表’entrypoint’)创建或覆盖清单中的Main-Class属性。它可用于创建或更新 JAR 文件。使用它来指定应用程序的入口点,而无需编辑或创建清单文件。

例如,这个命令创建了app.jar,其中清单中的Main-Class属性值设置为MyApp

jar cfe app.jar MyApp MyApp.class

你可以通过运行以下命令直接调用这个应用程序:

java -jar app.jar

如果入口类名在一个包中,它可能使用’.'(点)字符作为分隔符。例如,如果Main.class在一个名为foo的包中,入口点可以用以下方式指定:

jar cfe Main.jar foo.Main foo/Main.class

将类添加到 JAR 文件的类路径中

原文:docs.oracle.com/javase/tutorial/deployment/jar/downman.html

你可能需要在一个 JAR 文件中引用其他 JAR 文件中的类。

举例来说,在一个典型的情况下,一个小程序被打包在一个 JAR 文件中,其清单引用了另一个 JAR 文件(或者几个不同的 JAR 文件),这些文件作为该小程序的工具。

你可以在小程序或应用程序的清单文件中的Class-Path头部字段中指定要包含的类。Class-Path头部的形式如下:

Class-Path: *jar1-name jar2-name directory-name/jar3-name*

通过在清单中使用Class-Path头部,你可以避免在调用 Java 运行应用程序时需要指定长长的-classpath标志。


注意: Class-Path头部指向本地网络上的类或 JAR 文件,而不是 JAR 文件中的 JAR 文件或通过互联网协议可访问的类。要将 JAR 文件中的类加载到类路径中,你必须编写自定义代码来加载这些类。例如,如果MyJar.jar包含另一个名为MyUtils.jar的 JAR 文件,你不能使用MyJar.jar清单中的Class-Path头部来将MyUtils.jar中的类加载到类路径中。


一个例子

我们希望将MyUtils.jar中的类加载到类路径中,以便在MyJar.jar中使用。这两个 JAR 文件在同一个目录中。

我们首先创建一个名为Manifest.txt的文本文件,内容如下:

Class-Path: MyUtils.jar

警告: 文本文件必须以一个新行或回车符结束。如果最后一行没有以新行或回车符结束,它将无法被正确解析。


然后我们通过输入以下命令创建一个名为MyJar.jar的 JAR 文件:

jar cfm MyJar.jar Manifest.txt MyPackage/*.class

这将创建一个带有以下内容的清单的 JAR 文件:

Manifest-Version: 1.0
Class-Path: MyUtils.jar
Created-By: 1.7.0_06 (Oracle Corporation)

当你运行MyJar.jar时,MyUtils.jar中的类现在已经加载到类路径中。

相关文章
|
4天前
|
前端开发 Java Maven
【前端学java】全网最详细的maven安装与IDEA集成教程!
【8月更文挑战第12天】全网最详细的maven安装与IDEA集成教程!
21 2
【前端学java】全网最详细的maven安装与IDEA集成教程!
|
9天前
|
存储 网络协议 Oracle
java教程
java教程【8月更文挑战第11天】
14 5
|
1月前
|
SQL 安全 Java
「滚雪球学Java」教程导航帖(更新2024.07.16)
《滚雪球学Spring Boot》是一个面向初学者的Spring Boot教程,旨在帮助读者快速入门Spring Boot开发。本专通过深入浅出的方式,将Spring Boot开发中的核心概念、基础知识、实战技巧等内容系统地讲解,同时还提供了大量实际的案例,让读者能够快速掌握实用的Spring Boot开发技能。本书的特点在于注重实践,通过实例学习的方式激发读者的学习兴趣和动力,并引导读者逐步掌握Spring Boot开发的实际应用。
42 1
「滚雪球学Java」教程导航帖(更新2024.07.16)
WXM
|
25天前
|
Oracle Java 关系型数据库
Java JDK下载安装及环境配置超详细图文教程
Java JDK下载安装及环境配置超详细图文教程
WXM
129 3
|
1月前
|
测试技术 API Android开发
《手把手教你》系列基础篇(九十七)-java+ selenium自动化测试-框架设计篇-Selenium方法的二次封装和页面基类(详解教程)
【7月更文挑战第15天】这是关于自动化测试框架中Selenium API二次封装的教程总结。教程中介绍了如何设计一个支持不同浏览器测试的页面基类(BasePage),该基类包含了对Selenium方法的二次封装,如元素的输入、点击、清除等常用操作,以减少重复代码。此外,页面基类还提供了获取页面标题和URL的方法。
44 2
|
1月前
|
Web App开发 XML Java
《手把手教你》系列基础篇(九十六)-java+ selenium自动化测试-框架之设计篇-跨浏览器(详解教程)
【7月更文挑战第14天】这篇教程介绍了如何使用Java和Selenium构建一个支持跨浏览器测试的自动化测试框架。设计的核心是通过读取配置文件来切换不同浏览器执行测试用例。配置文件中定义了浏览器类型(如Firefox、Chrome)和测试服务器的URL。代码包括一个`BrowserEngine`类,它初始化配置数据,根据配置启动指定的浏览器,并提供关闭浏览器的方法。测试脚本`TestLaunchBrowser`使用`BrowserEngine`来启动浏览器并执行测试。整个框架允许在不同浏览器上运行相同的测试,以确保兼容性和一致性。
47 3
|
1月前
|
存储 Web App开发 Java
《手把手教你》系列基础篇(九十五)-java+ selenium自动化测试-框架之设计篇-java实现自定义日志输出(详解教程)
【7月更文挑战第13天】这篇文章介绍了如何在Java中创建一个简单的自定义日志系统,以替代Log4j或logback。
136 5
|
1月前
|
Java 数据安全/隐私保护
Java无模版导出Excel 0基础教程
经常写数据导出到EXCEL,没有模板的情况下使用POI技术。以此作为记录,以后方便使用。 2 工具类 样式工具: 处理工具Java接口 水印工具 导出Excel工具类 3 测试代码 与实际复杂业务不同 在此我们只做模拟 Controller Service 4 导出测试 使用Postman进行接口测试,没接触过Postman的小伙伴可以看我这篇博客Postman导出excel文件保存为文件可以看到导出很成功,包括水印 sheet页名称自适应宽度。还有一些高亮……等功能可以直接搜索使用
Java无模版导出Excel 0基础教程
|
1月前
|
设计模式 测试技术 Python
《手把手教你》系列基础篇(九十二)-java+ selenium自动化测试-框架设计基础-POM设计模式简介(详解教程)
【7月更文挑战第10天】Page Object Model (POM)是Selenium自动化测试中的设计模式,用于提高代码的可读性和维护性。POM将每个页面表示为一个类,封装元素定位和交互操作,使得测试脚本与页面元素分离。当页面元素改变时,只需更新对应页面类,减少了脚本的重复工作和维护复杂度,有利于团队协作。POM通过创建页面对象,管理页面元素集合,将业务逻辑与元素定位解耦合,增强了代码的复用性。示例展示了不使用POM时,脚本直接混杂了元素定位和业务逻辑,而POM则能解决这一问题。
43 6
|
1月前
|
设计模式 Java 测试技术
《手把手教你》系列基础篇(九十四)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-下篇(详解教程)
【7月更文挑战第12天】在本文中,作者宏哥介绍了如何在不使用PageFactory的情况下,用Java和Selenium实现Page Object Model (POM)。文章通过一个百度首页登录的实战例子来说明。首先,创建了一个名为`BaiduHomePage1`的页面对象类,其中包含了页面元素的定位和相关操作方法。接着,创建了测试类`TestWithPOM1`,在测试类中初始化WebDriver,设置驱动路径,最大化窗口,并调用页面对象类的方法进行登录操作。这样,测试脚本保持简洁,遵循了POM模式的高可读性和可维护性原则。
27 2