Spec-Zone .ru
спецификации, руководства, описания, API
След: Механизм Расширения
Урок: Создание и Используя Расширения
Установленные Расширения
Домашняя страница > Механизм Расширения > Создание и Используя Расширения

Установленные Расширения

Установленные расширения являются файлами JAR в каталоге lib/ext среды выполнения Java (JRE™) программное обеспечение. Поскольку его имя подразумевает, JRE является частью времени выполнения Комплекта разработчика для Java, содержащего базовый API платформы, но без средств разработки, таких как компиляторы и отладчики. JRE доступен или отдельно или как часть Комплекта разработчика для Java.

JRE является строгим подмножеством программного обеспечения JDK. Подмножество дерева каталогов программного обеспечения JDK похоже на это:

Дерево каталогов программного обеспечения JDK

JRE состоит из тех каталогов в пределах выделенного, окружают схему. Автономен ли Ваш JRE или часть программного обеспечения JDK, любой файл JAR в lib/ext каталога JRE автоматически обрабатывается средой выполнения как расширение.

Так как установленные расширения расширяют базовый API платформы, используют их рассудительно. Они являются редко подходящими для интерфейсов, используемых единственным, или маленьким набором приложений.

Кроме того, так как символы, определенные установленными расширениями, будут видимы во всех процессах Java, забота должна быть проявлена, чтобы гарантировать, что все видимые символы следуют за соответствующим "обратным доменным именем" и "соглашениями" иерархии class. Например, com.mycompany.MyClass.

С Java 6, файлы JAR расширения могут также быть помещены в расположение, которое независимо от любого определенного JRE, так, чтобы расширения могли быть совместно использованы всеми JREs, которые устанавливаются на системе. До Java 6, значение java.ext.dirs, упомянутого единственный каталог, но с Java 6, это - список каталогов (как CLASSPATH), который определяет расположения, в которых разыскиваются расширения. Первый элемент пути всегда является каталогом lib/ext JRE. Второй элемент является каталогом за пределами JRE. Это другое расположение позволяет файлам JAR расширения быть установленными однажды и использоваться несколькими JREs, установленными на той системе. Расположение изменяется в зависимости от операционной системы:

Отметьте, что установленное расширение, помещенное в один из вышеупомянутых каталогов, расширяет платформу каждого из JREs (Java 6 или позже) на той системе.

Простой Пример

Давайте создадим простое установленное расширение. Наше расширение состоит из одного class, RectangleArea, который вычисляет области прямоугольников:

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

У этого class есть единственный метод, area, который берет экземпляр java.awt.Rectangle и возвращает область прямоугольника.

Предположите, что Вы хотите протестировать RectangleArea с вызванным приложением AreaApp:

import java.awt.*;

public class AreaApp {
    public static void main(String[] args) {
        int width = 10;
        int height = 5;

        Rectangle r = new Rectangle(width, height);
        System.out.println("The rectangle's area is " 
                           + RectangleArea.area(r));
    }
}

Это приложение инстанцирует 10 x 5 прямоугольников, и затем распечатывает область прямоугольника, используя метод RectangleArea.area.

Выполнение AreaApp Без Механизма Расширения

Сначала давайте рассмотрим, как Вы работали бы AreaApp приложение, не используя механизм расширения. Мы предположим, что RectangleArea class связывается в файле JAR под названием area.jar.

class RectangleArea не является частью платформы Java, конечно, таким образом, Вы должны были бы поместить файл area.jar в путь class, чтобы работать AreaApp не получая исключение на этапе выполнения. Если бы area.jar был в каталоге /home/user, например, то Вы могли бы использовать эту команду:

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

Путь class, определенный в этой команде, содержит и текущий каталог, содержа AreaApp.class, и путь к файлу JAR, содержащему пакет RectangleArea. Вы получили бы требуемый вывод, выполняя эту команду:

The rectangle's area is 50

Выполнение AreaApp при использовании Механизма Расширения

Теперь давайте смотреть на то, как Вы работали бы AreaApp при использовании RectangleArea class как расширение.

Чтобы сделать RectangleArea class в расширение, Вы помещаете файл area.jar в каталог lib/ext JRE. Выполнение так автоматически дает RectangleArea состояние того, чтобы быть установленным расширением.

С area.jar, установленным как расширение, можно работать AreaAppне будучи должен определить путь class:

java AreaApp 

Поскольку Вы используете area.jar в качестве установленного расширения, среда выполнения будет в состоянии найти и загрузиться RectangleArea class даже при том, что Вы не определили это на пути class. Точно так же любой апплет или приложение, выполняемое любым пользователем на Вашей системе, были бы в состоянии найти и использовать RectangleArea class.

Если есть многократные JREs (Java 6 или позже) установлены на системе и хотят, чтобы RectangleArea class был доступен как расширение всех их, вместо того, чтобы установил это в каталоге lib/ext определенного JRE, установил это в расположении в масштабе всей системы. Например, на системном выполнении Linux, установите area.jar в каталоге /usr/java/packages/lib/ext. Затем AreaApp может выполнить использующие различные JREs, которые устанавливаются на той системе, например если различные браузеры конфигурируются, чтобы использовать различный JREs.


Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Создание и Используя Расширения
Следующая страница: Расширения Загрузки