Ограничение доступа
Eclipse 3.1 позволяет разработчикам модулей ограничивать доступность определенных пакетов для других модулей.
Пакет может классифицироваться как:
На основе этих классов доступности PDE создает правила доступа во время компиляции. Поэтому их нарушение приводит к замечаниям или ошибкам во время компиляции, в зависимости от вида нарушения.
Это позволяет избежать ошибок загрузки классов во время выполнения и обнаружить обращения к внутренним (нежелательным для использования) типам.
Доступные пакеты
Доступные пакеты всегда видимы другим модулям. Пакеты 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, выполните следующие действия для его создания:
Просмотр правил доступа
Просмотреть правила доступа для каждого элемента classpath можно на странице Путь компоновки Java страницы свойств модуля.