Ограничение зависимостей между пакетами Java

каковы возможности применения ограничений на зависимости пакетов в системе сборки Java? Например,myapp.server.bl.Customer класс не должен ссылаться на myapp.client.ui.customlayout пакета. Меня интересуют решения на основе Ant или IDE.

Я хотел бы получить сообщение об ошибке в построении, указав, что (обычай) правило зависимости пакета была нарушена и прервана. Я также хотел бы сохранить зависимости в списке, предпочтительно в текстовый файл, за пределами сценариев Ant или файлов проекта IDE.

(Я не знаю Maven, но я прочитал его здесь, он имеет лучшую поддержку управления зависимостями модулей)

7 ответов


Я считаю, что у Checkstyle есть чек на это. Это называется Контроль Импорт


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

вид старой статьи об идее (детали могут быть устаревшими):

http://www.eclipsezone.com/eclipse/forums/t53736.html

Если вы используя плагины Eclipse (или OSGi), "публичные" части плагина/модуля явно определены, и это является частью модели.


Айви кажется хорошим решением для вашей проблемы (если вы используете муравей). Ivy является официальным компонентом управления зависимостями Ant и, таким образом, хорошо интегрируется с ant. Он способен разрешать зависимости, обрабатывать конфликты, создавать исключения и так далее.

Он использует простую структуру xml для описания зависимостей и проще в использовании, чем Maven, потому что он только пытается решить проблемы разрешения зависимостей.

из плюща Домашняя страница:

Ivy-это инструмент для управления (записи, отслеживания, разрешения и отчетности) зависимостей проекта. Он характеризуется следующим:

  1. гибкость и конфигурируемость - Ivy по существу является агностиком процесса и не привязан к какой-либо методологии или структуре. Вместо этого он обеспечивает необходимую гибкость и конфигурируемость для адаптации к широкому спектру процессов управления зависимостями и построения.
  2. тесная интеграция с Apache Ant-хотя доступен как автономный инструмент, Ivy особенно хорошо работает с Apache Ant, предоставляя ряд мощных задач Ant, начиная от разрешения зависимостей до отчетов о зависимостях и публикации.

для конкретных решений IDE IntelliJ IDEA имеет инструмент анализа зависимостей, который позволяет также определять недопустимые зависимости. http://www.jetbrains.com/idea/webhelp2/dependency-validation-dialog.html

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

еще больше автоматизации можно получить с помощью сборки TeamCity JetBrains сервер, который может запускать сборки проверки и сообщать о выше настроенных проверках.

для другого независимого от IDE решения AspectJ можно использовать для объявления недопустимых зависимостей (и интеграции шага в процесс сборки, чтобы получить информацию о предупреждении/ошибке для проблем).


Eclipse поддерживает это через свойства пути сборки / свойства jar. Я думаю, что это может работать только через границы jar / project.


может быть Classsycle можно использовать: http://classycle.sourceforge.net/ddf.html


вы можете использовать несколько модулей в IDEA или Maven или несколько проектов в Eclipse и Gradle. Концепция одна и та же во всех случаях.

тривиальная интерпретация будет модулем для myapp.сервер.бл и еще один для myapp.клиент.пользовательский интерфейс.customlayout без зависимостей времени компиляции между ними. Теперь любая попытка скомпилировать код или код-полный против противоположного модуля / проекта потерпит неудачу по желанию.

аудит как обширная проблема уже есть, полезной отправной точкой для IntelliJ IDEA является Анализ Зависимостей:

http://www.jetbrains.com/idea/webhelp/analyzing-dependencies.html

из этой статьи вы можете увидеть, как запускать и действовать на анализе зависимостей для вашего проекта.