您通常如何处理大型软件项目在运行时发生的传递依赖问题?
在过去的三个星期中,我一直试图在一个软件的另一个组件中启动一个大型软件的一个组件,但是由于仅在运行时才知道的传递依赖项问题,该软件间歇性地消失了。
通过传递依赖关系问题,我的意思是给定项目的依赖关系的某些依赖关系在运行时与其他依赖关系发生冲突,从而导致不稳定或即时失败。
有成百上千的依赖在使用中,并且与该工具相关联的子项目大约有50个,这些其他项目是由其他团队隔离进行的,其中所有模块之间都具有深层嵌套的依赖关系。鉴于项目的规模和复杂性,没人知道所有子项目的用途。
在这种情况下,您是否会尝试为受影响的组件的每个依赖项生成DAG的可视化表示,并尝试确定在运行时可能在何处发生冲突?我无法控制其他子项目中依赖项的管理方式,也无法更改其他开发人员编写的任何Java代码
我提出的解决方案只能工作一两个小时,然后由于上游组件的更改而停止工作。上游组件的一个示例是工件,我正在处理的项目依赖于工件,该工件是在CI管道的较早阶段构建的。
应他人的要求,我将提供有关正在使用哪种技术的信息,可能会因提供太多信息而导致问题被解决,或者身体变得太长的风险:
- Maven用于依赖性管理;和
- Spring用作DI容器;
- 由于在运行时加载了其他模块的上下文,因此大多数依赖性问题都涉及到重叠的Bean上下文。
- 该产品运行正常,并且存在大量的单元测试和集成测试,以确保程序的功能正确性
总的来说,我正在寻找一种与语言无关的方法来确定解决依赖冲突的方法,而不用枚举给定项目依赖的所有可能组合。
我无法重新设计项目,添加其他质量保证,无法推动公司范围内的范式转换或切换语言作为解决方案。