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

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

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

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

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

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

 

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

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

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

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

 

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

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

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

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

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

Примечания:

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

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

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

 

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

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

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

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

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

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

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

помощник по содержимому - нежелательные варианты

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

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

 

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

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

В следующем примере дружественный модуль org.eclipse.pde.ui имеет полный доступ к пакету org.eclipse.pde.internal.core.bundle из модуля 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