Wie gehen Sie normalerweise mit transitiven Abhängigkeitsproblemen um, die zur Laufzeit in großen Softwareprojekten auftreten?
In den letzten drei Wochen habe ich versucht, eine Komponente einer großen Software innerhalb einer anderen Komponente der Software zu starten, diese stirbt jedoch zeitweise aufgrund von Problemen mit der transitiven Abhängigkeit, die nur zur Laufzeit bekannt sind.
Mit transitiven Abhängigkeitsproblemen meine ich, dass bestimmte Abhängigkeiten der Abhängigkeiten eines bestimmten Projekts zur Laufzeit mit anderen Abhängigkeiten kollidieren und Instabilität oder sofortigen Fehler verursachen.
Es werden Hunderte von Abhängigkeiten verwendet, und es gibt ungefähr 50 Teilprojekte, die mit dem Tool verknüpft sind und von anderen Teams isoliert bearbeitet werden, wobei alle Module tief verschachtelte Abhängigkeiten untereinander aufweisen. Niemand weiß, wofür alle Teilprojekte verwendet werden, angesichts des Umfangs und der Komplexität des Projekts.
Würden Sie in dieser Situation versuchen, eine visuelle Darstellung der DAG für jede der Abhängigkeiten der betroffenen Komponente zu erstellen und festzustellen, wo zur Laufzeit Kollisionen auftreten können? Ich habe keine Kontrolle darüber, wie Abhängigkeiten in anderen Unterprojekten verwaltet werden, und kann keinen Java-Code ändern, der von anderen Entwicklern geschrieben wurde
Die Lösungen, die ich mir ausgedacht habe, funktionieren nur ein oder zwei Stunden und funktionieren dann aufgrund von Änderungen an den vorgelagerten Komponenten nicht mehr. Ein Beispiel für eine vorgelagerte Komponente ist ein Artefakt, von dem das Projekt, an dem ich arbeite, abhängig ist und das zu einem früheren Zeitpunkt in der CI-Pipeline erstellt wurde.
Auf Wunsch anderer werde ich Informationen darüber aufnehmen, welche Technologie verwendet wird, auf die Gefahr hin, dass die Frage wegen zu vieler Informationen geschlossen wird oder der Körper zu lang wird:
- Maven wird für das Abhängigkeitsmanagement verwendet. und
- Die Feder wird als DI-Behälter verwendet.
- Die meisten Abhängigkeitsprobleme betreffen überlappende Bean-Kontexte, da die Kontexte anderer Module zur Laufzeit geladen werden
- Das Produkt funktioniert ordnungsgemäß, und es gibt eine Vielzahl von Komponententests und Integrationstests, um der funktionalen Korrektheit des Programms zu entgehen
Im Allgemeinen suche ich nach einem sprachunabhängigen Ansatz, um Möglichkeiten zur Lösung von Abhängigkeitskonflikten zu identifizieren, ohne alle möglichen Kombinationen der Abhängigkeiten eines bestimmten Projekts aufzuzählen.
Ich kann das Projekt nicht neu gestalten, zusätzliche Qualitätstore hinzufügen, auf Paradigmenwechsel im gesamten Unternehmen drängen oder die Sprache als Lösung wechseln.