Как вы обычно подходите к проблемам транзитивной зависимости, возникающим во время выполнения в больших программных проектах?
В течение последних трех недель я пытался запустить компонент большого программного обеспечения в другом компоненте программного обеспечения, но он периодически умирает из-за проблем переходной зависимости, которые известны только во время выполнения.
Под транзитивными проблемами зависимостей я подразумеваю, что определенные зависимости данного проекта конфликтуют с другими зависимостями во время выполнения, вызывая нестабильность или мгновенный сбой.
Существуют сотни при сотнях используемых зависимостей, и есть около 50 подпроектов, связанных с инструментом, над которыми работают отдельные группы, где все модули имеют глубоко вложенные зависимости друг от друга. Никто не знает, для чего используются все подпроекты, учитывая масштаб и сложность проекта.
В этой ситуации попытаетесь ли вы сгенерировать визуальное представление группы доступности базы данных для каждой из зависимостей затронутого компонента и попытаетесь определить, где могут возникнуть конфликты во время выполнения? У меня нет контроля над тем, как управляются зависимости в других подпроектах, и я не могу изменить любой код Java, написанный другими разработчиками.
Решения, которые я придумала, работают только в течение часа или двух, и затем они перестают работать из-за изменений в вышестоящих компонентах. Примером вышестоящего компонента является артефакт, от которого зависит проект, над которым я работаю, который построен на более ранней стадии в конвейере CI.
По другим просьбам я собираюсь включить информацию о том, какая технология используется, рискуя закрыть вопрос о предоставлении слишком большого количества информации или о том, что тело станет слишком длинным:
- Maven используется для управления зависимостями; а также
- Spring используется в качестве DI-контейнера;
- Большинство проблем с зависимостями связаны с перекрывающимися контекстами компонентов в результате загрузки других модулей во время выполнения.
- Продукт работает должным образом, и есть шведские столы модульных тестов, и интеграционные тесты, чтобы ускорить функциональную корректность программы
В общем, я ищу не зависящий от языка подход к определению способов разрешения конфликтов зависимостей без перечисления всех возможных комбинаций зависимостей данного проекта.
Я не могу переделать проект, добавить дополнительные качественные ворота, добиваться смены парадигмы в компании или переключать языки в качестве решения.