Cette page liste l’ensemble des artefacts publiés par Vauban, les packages JPMS qu’ils exportent, les goals du plugin Maven et la comparaison entre les profils CDI Lite et Full.

Artefacts Maven

Artefact Scope conseillé Rôle

io.vidocq.vauban:vauban-api:0.1.0-SNAPSHOT

compile

API publique (Vauban.bootstrap(), BeanFactory<T>, etc.)

io.vidocq.vauban:vauban-core:0.1.0-SNAPSHOT

runtime

Container runtime CDI 4.1 Lite

io.vidocq.vauban:vauban-processor:0.1.0-SNAPSHOT

provided

APT (génération de _Factory, _ClientProxy à process-classes)

io.vidocq.vauban:vauban-indexer:0.1.0-SNAPSHOT

provided

Indexer build-time des beans (zéro dépendance)

io.vidocq.vauban:vauban-maven-plugin:0.1.0-SNAPSHOT

build

Plugin Maven (goals : index, process, generate, analyze, dist, encrypt)

io.vidocq.vauban:vauban-classloader-spi:0.1.0-SNAPSHOT

runtime

SPI ClassLoader (ByteSourcePlugin, ArchiveReader)

io.vidocq.vauban:vauban-sjar:0.1.0-SNAPSHOT

runtime (optionnel)

Implémentation .sjar (chiffrement AES-256-GCM)

io.vidocq.vauban:vauban-junit:0.1.0-SNAPSHOT

test

Extension JUnit 5 (@VaubanTest)

io.vidocq.vauban:vauban-test-suite:0.1.0-SNAPSHOT

test

Suite officielle de tests d’intégration

Modules JPMS exportés

Module Packages exportés

io.vidocq.vauban.api

io.vidocq.vauban.api

io.vidocq.vauban.core

io.vidocq.vauban.core, .container, .langmodel, .langmodel.declarations, .langmodel.types, .types, .bean.model, .bean.discovery, .bean.resolution, .bean.validation, .context, .event, .interceptor, .enrichment, .extensions

io.vidocq.vauban.indexer

io.vidocq.vauban.indexer, .indexer.model, .indexer.scanner

io.vidocq.vauban.processor

(interne — requiert java.compiler)

io.vidocq.vauban.classloader.spi

io.vidocq.vauban.classloader.spi

io.vidocq.vauban.sjar

io.vidocq.vauban.sjar, .sjar.cli

io.vidocq.vauban.junit

io.vidocq.vauban.junit

io.vidocq.vauban.core fournit jakarta.enterprise.inject.spi.CDIProvider via provides. Aucun opens non justifié.

Goals du plugin Maven

Goal Rôle

vauban:index

Scanne le module-path et écrit META-INF/vauban/index.bin.

vauban:process

Lance l’APT (équivalent à javac -processor).

vauban:generate

Génère les _Factory, _ClientProxy, _ProducerFactory via Class-File API.

vauban:analyze

Analyse JPMS, détecte split packages et exports incohérents.

vauban:dist

Packaging d’une distribution prête à l’exécution (jlink + image).

vauban:encrypt

Chiffrement de jar signé via vauban-sjar (optionnel).

Extension JUnit (vauban-junit)

@VaubanTest boote un container léger pour les tests :

@VaubanTest
class GreetingServiceTest {
    @Inject GreetingService greeting;

    @Test
    void hello() {
        assertEquals("Hello, Vauban!", greeting.hello("Vauban"));
    }
}

Trois modes de découverte :

  • @VaubanTest seul — scanLocal() du package du test.

  • @VaubanTest(scan = ScanMode.CLASSPATH)scanClasspath() complet.

  • @VaubanTest(beans = {Foo.class, Bar.class})addBeanClass(…​).

Comparaison CDI 4.1 Lite vs Full

Fonctionnalité Lite Full Vauban

Beans gérés, scopes standards

Producers, disposers

Événements (Event<T>, @Observes, @ObservesAsync)

Intercepteurs (@AroundInvoke, @AroundConstruct)

Build Compatible Extensions (BCE)

Portable Extensions (Extension SPI runtime)

@ConversationScoped

@SessionScoped

// TODO@user: confirmer

Passivation, sérialisation des beans

@Specializes

EL pour beans gérés

Decorators

Optionnel

// TODO@user: valider la couverture

Configuration

Vauban ne nécessite aucun fichier de configuration applicatif. La sélection des beans se fait via :

  • le module-info.java (visibilité JPMS) ;

  • la stratégie de bootstrap (scanLocal(), scanClasspath(), addBeanClass()).

Pour la configuration applicative dynamique, utiliser MicroProfile Config via Vidocq Runtime.

Bugs et benchmarks

  • BUG.md — bugs reproductibles tracés.

  • BENCH.md — benchmarks (à créer si absent).

Compatibilité

  • Java 25 (LTS), Maven 3.9.16.

  • JPMS strict, modules nommés exclusivement.

  • CDI 4.1 — profil Lite.

  • Compatible GraalVM native-image et Project Leyden CDS.