Ограничить зависимости между пакетами Java - PullRequest
9 голосов
/ 29 сентября 2008

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

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

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

Ответы [ 7 ]

7 голосов
/ 29 сентября 2008

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

6 голосов
/ 29 сентября 2008

Вы можете настроить проекты Eclipse для указания Правил доступа. Правила доступа могут указывать уровни «Запрещено», «Не рекомендуется» и «Доступно», все с правилами подстановочных знаков. Затем вы можете настроить нарушения Discouraged или Forbidden, чтобы они отмечались как предупреждения или ошибки во время сборок.

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

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

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

3 голосов
/ 30 сентября 2008

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

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

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

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

3 голосов
/ 30 сентября 2008

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

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

С домашней страницы плюща:

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

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

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

1 голос
/ 29 сентября 2008

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

0 голосов
/ 25 марта 2010

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...