已安装的扩展程序

原文: https://docs.oracle.com/javase/tutorial/ext/basics/install.html

已安装的扩展是 Java Runtime Environment(JRE™)软件的lib / ext目录中的 JAR 文件。顾名思义,JRE 是 Java Development Kit 的运行时部分,包含平台的核心 API,但没有编译器和调试器等开发工具。 JRE 可以单独使用,也可以作为 Java Development Kit 的一部分使用。

JRE 是 JDK 软件的严格子集。 JDK 软件目录树的子集如下所示:

JDK software directory tree

JRE 由图中突出显示的框内的那些目录组成。无论您的 JRE 是独立的还是 JDK 软件的一部分,JRE 目录的lib / ext中的任何 JAR 文件都会被运行时环境自动视为扩展。

由于已安装的扩展扩展了平台的核心 API,因此请谨慎使用它们。它们很少适用于单个或一小组应用程序使用的接口。

此外,由于安装的扩展定义的符号将在所有 Java 进程中可见,因此应注意确保所有可见符号遵循适当的“反向域名”和“类层次结构”约定。例如, com.mycompany.MyClass

从 Java 6 开始,扩展 JAR 文件也可以放置在独立于任何特定 JRE 的位置,以便扩展可以由系统上安装的所有 JRE 共享。在 Java 6 之前, java.ext.dirs的值引用了单个目录,但是从 Java 6 开始,它是一个目录列表(如CLASSPATH ),它指定了位置在哪里搜索扩展名。路径的第一个元素始终是 JRE 的lib / ext目录。第二个元素是 JRE 之外的目录。此其他位置允许扩展 JAR 文件安装一次,并由该系统上安装的多个 JRE 使用。位置因操作系统而异:

  • Solaris™操作系统: / usr / jdk / packages / lib / ext
  • Linux: / usr / java / packages / lib / ext
  • Microsoft Windows:%SystemRoot%\ Sun \ Java \ lib \ ext

请注意,放置在上述目录之一中的已安装扩展程序扩展了平台上每个的 JRE(Java 6 或更高版本)。

一个简单的例子

让我们创建一个简单的已安装扩展。我们的扩展由一个类RectangleArea组成,它计算矩形区域:

  1. public final class RectangleArea {
  2. public static int area(java.awt.Rectangle r) {
  3. return r.width * r.height;
  4. }
  5. }

这个类有一个方法,区域,它接受java.awt.Rectangle的一个实例并返回矩形的区域。

假设您要使用名为AreaApp的应用程序测试RectangleArea

  1. import java.awt.*;
  2. public class AreaApp {
  3. public static void main(String[] args) {
  4. int width = 10;
  5. int height = 5;
  6. Rectangle r = new Rectangle(width, height);
  7. System.out.println("The rectangle's area is "
  8. + RectangleArea.area(r));
  9. }
  10. }

该应用程序实例化一个 10 x 5 矩形,然后使用RectangleArea.area方法打印出矩形区域。

在没有扩展机制的情况下运行 AreaApp

让我们首先回顾一下如何在不使用扩展机制的情况下运行AreaApp应用程序。我们假设RectangleArea类捆绑在名为area.jar的 JAR 文件中。

当然, RectangleArea类不是 Java 平台的一部分,因此您需要将area.jar文件放在类路径上才能运行AreaApp而不会获取运行时异常。例如,如果area.jar位于目录/ home / user中,则可以使用此命令:

  1. java -classpath .:/home/user/area.jar AreaApp

此命令中指定的类路径包含当前目录,包含AreaApp.class ,以及包含RectangleArea包的 JAR 文件的路径。您可以通过运行此命令获得所需的输出:

  1. The rectangle's area is 50

使用扩展机制运行 AreaApp

现在让我们看一下如何使用RectangleArea类作为扩展来运行AreaApp

要将RectangleArea类转换为扩展名,请将文件area.jar放在 JRE 的lib / ext目录中。自动执行此操作会为RectangleArea提供已安装扩展的状态。

area.jar作为扩展名安装,无需指定类路径即可运行AreaApp

  1. java AreaApp

因为您使用area.jar作为已安装的扩展,所以即使您没有在类路径上指定它,运行时环境也能够找到并加载RectangleArea类。同样,系统上任何用户运行的任何 applet 或应用程序都可以找到并使用RectangleArea类。

如果系统上安装了多个 JRE(Java 6 或更高版本),并希望RectangleArea类可用作所有 JRE 的扩展,而不是将其安装在lib / ext 中特定 JRE 的目录,安装在系统范围的位置。例如,在运行 Linux 的系统上,在目录/ usr / java / packages / lib / ext中安装area.jar 。然后AreaApp可以使用安装在该系统上的不同 JRE 运行,例如,如果将不同的浏览器配置为使用不同的 JRE。