Como você normalmente aborda problemas de dependência transitiva que ocorrem em tempo de execução em grandes projetos de software?
Nas últimas três semanas, tenho tentado iniciar um componente de um grande software dentro de outro componente do software, mas ele morre intermitentemente devido a problemas de dependência transitiva que são conhecidos apenas em tempo de execução.
Por problemas de dependência transitiva, quero dizer que certas dependências das dependências de um determinado projeto colidem com outras dependências no tempo de execução, causando instabilidade ou falha instantânea.
Existem centenas e centenas de dependências em uso e há aproximadamente 50 subprojetos associados à ferramenta, que são trabalhados isoladamente por outras equipes, em que todos os módulos possuem dependências profundamente aninhadas entre si. Ninguém sabe para que servem todos os subprojetos, dada a escala e a complexidade do projeto.
Nessa situação, você tentaria gerar uma representação visual do DAG para cada uma das dependências do componente afetado e tentaria determinar onde colisões podem ocorrer no tempo de execução? Não tenho controle sobre como as dependências são gerenciadas em outros subprojetos e não posso alterar nenhum código Java que tenha sido escrito por outros desenvolvedores
As soluções apresentadas apenas funcionam por uma ou duas horas e, em seguida, param de funcionar devido a alterações nos componentes upstream. Um exemplo de um componente upstream é um artefato no qual o projeto em que estou trabalhando depende do qual é construído em um estágio anterior no pipeline de IC.
A pedido de outras pessoas , incluirei informações sobre qual tecnologia está sendo usada, correndo o risco de encerrar a pergunta por fornecer informações demais ou o corpo ficar muito longo:
- Maven é usado para gerenciamento de dependências; e
- A mola é usada como um recipiente DI;
- A maioria dos problemas de dependência envolve sobreposição de contextos de bean como resultado dos contextos de outros módulos serem carregados no tempo de execução
- O produto funciona corretamente, e existem inúmeros cordões de testes de unidade e testes de integração para evitar a correção funcional do programa
Em geral, estou procurando uma abordagem independente de idioma para identificar maneiras de resolver conflitos de dependência sem enumerar todas as combinações possíveis das dependências de um determinado projeto.
Não consigo re-arquitetar o projeto, adicionar portas de qualidade adicionais, promover mudanças de paradigma na empresa ou alternar idiomas como uma resolução.