Dependency Hell, das kennen viele Softwareentwickler oft aus mature Projekten. Was bedeutet das fuers Projekt?
- Es kann nicht auf aktuelle Versionen von Libs migriert werden, Java eingeschlossen. Dadurch bleiben nuetzliche Funktionen verschlossen.
- Das Projekt ist statisch wie Beton und nur unter sehr grossem Zeitauswand aenderbar.
- CVEs koennen nicht behoben werden.
Um Dependencies effiktiv zum meisten und obige Schwaechen zu umschiffen, hier ein paar Best Pracices im Umgang mit Dependencies.
- Goldene Regeln
- Less is more
- Convention over configuration
- Versuche mit moeglichst wenig Konfigurationen auszukommen.
- Versiuche moeglichst wenig Dependencies zu benutzen.
- Benutze Parents wenn moeglich.
- Benutze Dependeny Management (Maven) wenn es moeglich ist.
- Benutze nur fixe Versionen von Libs wenn sie nicht im Parent verfuegbar sind.
- Wenn du Excludes/Includes brauchst z.B. um CVEs zu fixen, dann hinterlasse einen entsprechenden Kommentar mit der CVE Nummer. So kann diese Konfiguration spaeter sehr einfach entfernt werden.
- Update regelmaessig deine Dependencies um keinen Wartungsstau aufkommen zu lassen. Du kannst leicht einen Check Step in der Build Pipeline einbauen die dir Anzahl der outdated Libs ausgibt.
- Aktuelle Libs verbessern die Sicherheit, aktuelle Libs haben weniger CVEs.
- Pruefe ob Dependencies noch benutzt werden
- Grep isy dein Freunf fuer Compile Scope Dependencies: grep -r com.strange-package src/
- Organize your imports
- Das Build file ist genauso ein Teil deines Softwareprojetes wie der Code selbst.