Как избежать циклических c зависимостей в Maven - PullRequest
0 голосов
/ 19 апреля 2020

У меня есть проект A, в котором проект B указан в качестве зависимости, но B не имеет A в качестве зависимости. Я хочу использовать классы из A внутри B, не создавая циклическую c зависимость. Какой лучший способ выполнить sh это без создания нового проекта?

Подход с использованием грубой силы, о котором я подумал, заключался в том, чтобы просто явно скопировать и вставить нужные мне классы из А в В, но это явно плохо .

1 Ответ

1 голос
/ 19 апреля 2020

У меня есть проект A, в котором проект B указан как зависимость, но B не имеет зависимости A.

Если A зависит от B, то B не может зависеть от A.

Обратите внимание, что циклические c зависимости проблематичны c, даже если вы не используете Maven. Он ломается, когда вы начинаете использовать Java 8+ модулей тоже. И вы можете столкнуться с проблемами стабильности / конвергенции сборки без использования модулей.

Я хочу использовать классы из A внутри B без создания циклической c зависимости.

Переместите классы из B в A. (Не копируйте их. Вы не хотите, чтобы один и тот же класс находился в двух местах. Если полные имена разные, у вас есть дублированный код. Если они совпадают, вы можете также сталкивается с проблемами во время выполнения.)

В качестве альтернативы создайте третий проект C, содержащий классы, в которых A и B зависят от C.

В качестве альтернативы, объедините A и B в один проект.

В качестве альтернативы, рефакторинг самих классов; например, чтобы ввести интерфейсы или абстрактные классы в соответствующей точке, или переместить методы / функциональность вокруг.

Короче говоря, есть много способов избежать циклической c зависимости между проектами. Вам просто нужно проанализировать свой код, чтобы выработать наиболее подходящий способ (или способы) сделать это. Не существует магической c формулы / "наилучшей практики". Просто тяжелая работа.

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