Ограничение доступа

Eclipse 3.1 позволяет разработчикам модулей ограничивать доступность определенных пакетов для других модулей.

Пакет может классифицироваться как:

  1. Доступный
  2. Запрещенный
  3. Внутренний
  4. Внутренний с исключениями

На основе этих классов доступности PDE создает правила доступа во время компиляции. Поэтому их нарушение приводит к замечаниям или ошибкам во время компиляции, в зависимости от вида нарушения.

Это позволяет избежать ошибок загрузки классов во время выполнения и обнаружить обращения к внутренним (нежелательным для использования) типам.

 

Доступные пакеты

Доступные пакеты всегда видимы другим модулям.    Пакеты API должны всегда быть доступными, о доступности других пакетов нужно решать разработчику модуля.

Для того чтобы объявить пакет доступным, добавьте его в список Экспортируемые пакеты на странице Выполнение в редакторе манифеста модуля.

Доступные пакеты

 

Запрещенные пакеты

Пакет можно скрыть от других модулей исключив его из списка Экспортируемые пакеты на странице Выполнение в редакторе манифеста модуля.

Обращения к типам из запрещенного пакета приводят к ошибкам загрузки классов во время выполнения.

 Для избежания таких ошибок:

  1. Компилятор помечает обращения к недоступным типам сообщением с уровнем серьезности ERROR.
  2. Типы из недоступных пакетов не предлагаются помощником по работе с содержимым.

Примечания:

  1. Модули Eclipse SDK экспортируют все свои пакеты.
  2. Уровень серьезности для запрещенных обращений устанавливается на странице параметров Java > Компилятор > Ошибки/замечания > Устаревший и запрещенный API.

    Рекомендуемый уровень серьезности для них - ERROR.

    Поведение компилятора при обнаружении запрещенных обращений

Внутренние пакеты

Внутренние пакеты - это пакеты, которые не предназначены для использования другими модулями. Но они доступны им по умолчанию.

Внутренние пакеты скрываются от других модулей только в строгом режиме Eclipse (т.е. при запуске с ключом VM -Dosgi.resolverMode=strict).

Внутренние пакеты должны присутствовать в списке Экспортируемые пакеты на странице Выполнение в редакторе манифеста модуля со включенной опцией Скрытый.

Нежелательный доступ

Для препятствия доступу к внутренним пакетам других модулей принимаются две меры:

Нежелательный доступ

Нежелательный вариант помощника по работе с содержимым

Уровень серьезности для нежелательных обращений можно установить на странице параметров Java > Компилятор > Ошибки/замечания > Устаревшей и запрещенный API.

Поведение компилятора при обнаружении нежелательного обращения к пакетам

 

Внутренние пакеты с исключениями

Выберите этот вариант для предоставления полного доступа к пакетам только некоторым, "дружественным", модулям. Например, код PDE разделен на несколько модулей, и модуль пользовательского интерфейсаorg.eclipse.pde.ui должен иметь полный доступ к внутренним пакетам базового модуля org.eclipse.pde.core.

Поэтому модули org.eclipse.pde и org.eclipse.pde.ui объявлены дружественными модулю org.eclipse.pde.core и, следовательно, могут обращаться к внутреннему пакету org.eclipse.pde.internal.core.bundle.

Дружественные модули

Дружественные модули могут обращаться к любому типу пакета org.eclipse.pde.internal.core.bundle без замечаний компилятора.

Если обращение будет производиться из других модулей, компилятор пометит его в соответствии с выбранным уровнем серьезности.

 

Задействование ограничений доступа

Для использования описанных возможностей модуль должен содержать файл манифеста комплекта OSGi manifest.mf. PDE позаботится об всем другом.

Если в модуле нет файла manifest.mf, выполните следующие действия для его создания:

  1. Откройте файл plugin.xml в редакторе манифеста.
  2. В разделе Содержимое модуля на странице Обзор перейдите по ссылке "создать манифест комплекта OSGi".

Преобразование в manifest.mf

 

Просмотр правил доступа

Просмотреть правила доступа для каждого элемента classpath можно на странице Путь компоновки Java страницы свойств модуля.

Свойства модуля, страница Путь компоновки Java