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