Ограничение зависимостей между пакетами Java
-
02-07-2019 - |
Вопрос
Каковы возможности применения ограничений к зависимостям пакетов в системе сборки Java?Например, в myapp.server.bl.Customer
классу не должно быть разрешено ссылаться на myapp.client.ui.customlayout
посылка.Меня интересуют либо решения на основе Ant, либо решения, специфичные для IDE.
Я хотел бы получить сообщение об ошибке в сборке, указывающее, что было нарушено правило зависимости (пользовательского) пакета и сборка прервана.Я также хотел бы поддерживать зависимости в списке, предпочтительно в текстовом файле, вне Ant-скриптов или файлов проекта IDE.
(Я не знаю Maven, но я прочитал это здесь, у него лучшая поддержка управления зависимостями модулей)
Решение
Я полагаю, что у Checkstyle есть проверка для этого.Это называется Контроль импорта
Другие советы
Вы можете настроить проекты Eclipse для указания Правил доступа.В правилах доступа могут быть указаны уровни "Запрещено", "Не рекомендуется" и "Доступно", все с подстановочными знаками.Затем вы можете настроить, чтобы нарушения либо Не рекомендуется, либо Запрещено помечались как предупреждения или ошибки во время сборки.
Что-то вроде старой статьи об идее (подробности могут устареть):
http://www.eclipsezone.com/eclipse/forums/t53736.html
Если вы используете плагины Eclipse (или OSGi), то "общедоступные" части плагина / модуля явно определены, и это является частью модели.
плющ похоже, это хорошее решение вашей проблемы (если вы используете ant).Ivy является официальным компонентом управления зависимостями Ant и, таким образом, прекрасно интегрируется с ant.Он способен разрешать зависимости, обрабатывать конфликты, создавать исключения и так далее.
Он использует простую структуру xml для описания зависимостей и проще в использовании, чем Maven, поскольку он только пытается решить проблемы разрешения зависимостей.
С домашней страницы Ivy:
Ivy - это инструмент для управления (записи, отслеживания, разрешения и составления отчетов) зависимостями проекта.Он характеризуется следующим:
- гибкость и конфигурируемость - Ivy, по сути, не зависит от процесса и не привязана к какой-либо методологии или структуре.Вместо этого он обеспечивает необходимую гибкость и конфигурируемость для адаптации к широкому спектру процессов управления зависимостями и сборки.
- тесная интеграция с 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 / проекта.
Может быть Классный Велосипед может быть использован:http://classycle.sourceforge.net/ddf.html
Вы можете использовать несколько модулей в IDEA или Maven или несколько проектов в Eclipse и Gradle.Концепция одна и та же во всех случаях.
Тривиальной интерпретацией был бы модуль для myapp.server.bl и еще один для myapp.client.ui.customlayout мое приложение.клиент.пользовательский интерфейс без каких-либо зависимостей во время компиляции между ними.Теперь любая попытка скомпилировать код или завершить код для противоположного модуля / проекта завершится неудачно, как и ожидалось.
Чтобы проверить, насколько масштабной уже является проблема, полезной отправной точкой для IntelliJ IDEA является Анализ зависимостей:
http://www.jetbrains.com/idea/webhelp/analyzing-dependencies.html
Из этой статьи вы можете увидеть, как запускать анализ зависимостей для вашего проекта и действовать в соответствии с ним.