Похоже, у вашего проекта достаточно зависимостей, чтобы вы могли подумать о его структурировании с помощью пакетов OSGi (плагинов). Каждый пакет получает свой собственный загрузчик классов и определяет, какие пакеты (и, возможно, какие диапазоны версий и т. Д.) Он зависит, от каких пакетов он экспортирует, реэкспортирует ли он данные из своих зависимостей и т. Д.
Сам Eclipse структурирован из плагинов и фрагментов Eclipse, которые являются просто пакетами OSGi с необязательным крошечным кусочком дополнительной проводки Eclipse (plugin.xml
, который используется для объявления «точек расширения» и «расширений» Eclipse) прилагается. Eclipse, таким образом, имеет довольно хорошие инструменты для создания и управления встроенными пакетами (через среду разработки плагинов). Многое из того, что вы там обнаружите, может привести к тому, что вы объедините «OSGi bundle» с «плагином, расширяющим IDE Eclipse», но эти две концепции вполне разделимы.
Инструменты Eclipse довольно четко (а иногда и раздражающе, но в смысле «полезной медицины») различают пакеты в вашей среде сборки и пакеты, включенные в конкретную конфигурацию запуска.
После нескольких лет жизни на земле OSGi стандартная Java-платформа "flat classpath" кажется мне странной и даже немного сломанной, в основном потому, что (как вы уже видели) она выбрасывает все JAR-файлы в одну гигантскую арену и надеется, что они может сортировать вещи. Среда OSGi дает мне намного больший контроль над отношениями зависимости, и как «побочный эффект» также естественно требует прояснения этих отношений. Между этими четкими декларациями и их применением инструментарием структура проекта более очевидна для всех в команде.
если мой код случайно использует зависимость зависимости, я хочу, чтобы она отображалась как ошибка компиляции. В идеале, так как класс не найден, но любая ошибка может подойти.
Поместите свой код в один плагин, свои прямые зависимости в другие плагины, их зависимости в другие плагины и т. Д. И объявите зависимости каждого плагина. Затмение сразу сделает то, что вы хотите. Вам не будет предложено содержимое зависимостей в автозаполнениях; вы получите красные загогулины и ошибки в построении; и т.д.