Spec-Zone .ru
спецификации, руководства, описания, API
|
Установленные расширения являются файлами JAR в каталоге lib/ext среды выполнения Java (JRE™) программное обеспечение. Поскольку его имя подразумевает, JRE является частью времени выполнения Комплекта разработчика для Java, содержащего базовый API платформы, но без средств разработки, таких как компиляторы и отладчики. JRE доступен или отдельно или как часть Комплекта разработчика для Java.
JRE является строгим подмножеством программного обеспечения 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
приложение, не используя механизм расширения. Мы предположим, что 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
при использовании 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.