Vauban est un container CDI 4.1 qui résout l’injection au moment de la compilation. JPMS-natif, zéro dépendance runtime, pas de proxy dynamique — la résolution des dépendances se calcule comme une trajectoire balistique : sur plan, avant le premier coup de pelle.

Origine du nom

Sébastien Le Prestre, marquis de Vauban (1633-1707), maréchal de France, ingénieur militaire de Louis XIV. Concepteur de la « ceinture de fer », auteur du Traité de l’attaque et de la défense des places. Voir la fiche Wikipédia.

Vauban faisait de la défense un art mathématique : trajectoires, sape, contre-mine, tout calculé d’avance. Le container Vauban applique la même discipline à CDI. Chaque relation @Inject est résolue à process-classes. Un Indexer énumère les beans, un Processor génère les _Factory en bytecode via la Class-File API. À l’exécution, plus rien à calculer — il ne reste qu’à instancier. Les fortifications sont posées avant le premier requête.

En un coup d’œil

Spec implémentée

Jakarta CDI 4.1 — profil Lite

Repo

https://codeberg.org/Vidocq/vauban

Java

25 (LTS)

Module JPMS

io.vidocq.vauban.api, io.vidocq.vauban.core, io.vidocq.vauban.indexer, io.vidocq.vauban.processor, io.vidocq.vauban.junit, io.vidocq.vauban.classloader.spi, io.vidocq.vauban.sjar

Dépendances runtime

Aucune au-delà de jakarta.cdi et jakarta.cdi.lang.model

TCK CDI 4.1 Lite

partiel — voir état détaillé

Trois traits identitaires

  1. Zéro dépendance runtime — uniquement la spec Jakarta CDI. Pas de Weld, pas d’ArC, pas de Guice.

  2. Codegen statique — Class-File API (JEP 484) à process-classes. Aucune réflexion au démarrage. Aucun proxy dynamique. Aucune librairie de génération externe (ASM, Byte Buddy).

  3. JPMS strict — chaque artefact Vauban a son module-info.java. Pas de classpath, pas d'`opens` non justifié, pas d'`add-opens` au lancement.

Positionnement dans l’écosystème

Diagram

Ressources rapides

Les chiffres de performance sont consignés dans BENCH.md du repo Vauban. Cette page n’en cite aucun.