Vue aérienne d'un immeuble de bureaux moderne aux lignes nettes, symbolisant la structure complexe du code.

GitHub publie un outil pour gérer les dépendances transitives Java

Un script, pin-transitives.mjs, est désormais disponible sur GitHub pour aider les équipes à gérer les dépendances transitives dans les applications Java. Cet outil permet d’analyser l’arbre de dépendances produit par Maven, puis d’interroger Renovate afin d’identifier les mises à jour de sécurité disponibles, et potentiellement de générer un Bill of Materials (BOM).

Le problème qu’il adresse est bien connu dans le développement Java : alors que les dépendances directes sont faciles à mettre à jour avec des outils comme Renovate ou Dependabot, ce sont les centaines de bibliothèques qui s’installent en arrière-plan – les transitives – qui représentent le véritable talon d’Achille de la chaîne d’approvisionnement logicielle. Si une faille de sécurité apparaît au plus profond de l’arbre, un simple changement de version directe ne suffit pas à remonter la menace.

Lightwell propose des rebuilds d’entreprise pour ces bibliothèques open source. Face aux politiques de conformité qui varient d’une entreprise à l’autre, l’outil offre trois stratégies pour intégrer ces paquets fiables dans les pipelines. L’une d’elles est l’analyse ciblée des dépendances.

Développeur concentré devant plusieurs écrans dans un bureau baigné de lumière dorée, examinant des fichiers de dépendances.

Ce processus évalue l’intégralité de la hiérarchie des dépendances par rapport à l’index Lightwell. Il génère un rapport détaillé qui fait correspondre les composants standards aux rebuilds Lightwell. Les équipes peuvent alors examiner ces résultats selon leurs politiques internes, sans modifier leurs fichiers de construction immédiatement. L’outil peut, par exemple, révéler que org.springframework:spring-core passe de 5.3.18 à 5.3.18.rhlw-00001.

Une autre approche, plus contraignante mais offrant une auditabilité totale, est l’épinglage des dépendances via un BOM généré. En utilisant le script avec l’option --write, on produit un fichier structuré, comme lightwell-pins.xml. Ce fichier contient les déclarations dependencyManagement qui fixent les paquets standards aux versions Lightwell sécurisées. Pour l’intégrer, il suffit de l’importer dans la configuration principale du projet.

Le script lui-même exécute Maven pour obtenir l’arbre JSON des dépendances, puis lance Renovate. Il liste les mises à jour, qu’elles soient directes ou transitives, sans modifier le pom.xml par défaut. Si l’on ajoute l’option --write, il génère le BOM, créant un fichier com.lightwell:rhlw-pins:0.0.1.

Il est à noter que les presets de Renovate, disponibles dans le dépôt lightwell-experience/renovate-config, permettent déjà de gérer ces scénarios. Par exemple, le preset java-remediated ne fait que incrémenter le rebuild Lightwell (de 3.7.1.rhlw-00001 à 3.7.1.rhlw-00002), tandis que java-upgrade permet des sauts vers des versions majeures en conservant les artefacts Lightwell.

Pour que l’outil fonctionne, l’application doit avoir renovate.json et Renovate doit être installé. L’exécution de node scripts/pin-transitives.mjs --write produit le fichier BOM, que l’on peut ensuite installer via mvn install:install-file.

Sources