Plugin Audit
Contraintes, métriques et formats de rapport.
Référence complète du plugin d'audit HexaGlue : options de configuration, contraintes vérifiées, métriques calculées et formats de rapport.
Ajouter le plugin d'audit
<plugin> <groupId>io.hexaglue</groupId> <artifactId>hexaglue-maven-plugin</artifactId> <version>6.0.0</version> <extensions>true</extensions> <configuration> <basePackage>com.acme.shop</basePackage> </configuration> <dependencies> <dependency> <groupId>io.hexaglue.plugins</groupId> <artifactId>hexaglue-plugin-audit</artifactId> <version>3.0.0</version> </dependency> </dependencies></plugin>L'audit s'exécute automatiquement lors de la phase verify (mvn verify). Le rapport est généré dans target/hexaglue/reports/audit/.
Trois éléments clés dans cette configuration :
<extensions>true</extensions>: active le binding automatique aux phases Maven. Les goals HexaGlue se déclenchent sans configuration supplémentaire lors demvn compileoumvn verify.<basePackage>: package racine à analyser. Seules les classes de ce package et de ses sous-packages sont classifiées par HexaGlue.- Le plugin d'audit est déclaré comme
<dependency>du plugin Maven, pas du projet. HexaGlue découvre automatiquement les plugins via le mécanisme JavaServiceLoader: il suffit de les ajouter ici pour qu'ils soient actifs.
Les projets utilisant Lombok sont pris en charge nativement depuis HexaGlue 6.0.0 : le delombok est injecté automatiquement avant l'analyse, aucune configuration spéciale n'est nécessaire côté plugin.

Options Maven
<configuration> du plugin Maven dans le pom.xml.Ces paramètres contrôlent le comportement du build (échec sur violations) et l'emplacement des rapports générés.
Le paramètre
skip peut aussi être passé en ligne de commande via -Dhexaglue.skip=true.| Option | Type | Défaut |
|---|---|---|
basePackage | string | (requis) |
failOnError | boolean | true |
errorOnBlocker | boolean | true |
errorOnCritical | boolean | false |
reportDirectory | string | ${project.build.directory}/hexaglue/reports |
skip | boolean | false |
failOnUnclassified | boolean | false |
tolerantResolution | boolean | false |
validationReportPath | string | ${project.build.directory}/hexaglue/reports/validation/validation-report.md |
<plugin> <groupId>io.hexaglue</groupId> <artifactId>hexaglue-maven-plugin</artifactId> <version>6.0.0</version> <extensions>true</extensions> <configuration> <basePackage>com.acme.shop</basePackage> <failOnError>true</failOnError> <errorOnBlocker>true</errorOnBlocker> <errorOnCritical>false</errorOnCritical> <reportDirectory>${project.build.directory}/hexaglue/reports</reportDirectory> </configuration> <dependencies> <dependency> <groupId>io.hexaglue.plugins</groupId> <artifactId>hexaglue-plugin-audit</artifactId> <version>3.0.0</version> </dependency> </dependencies></plugin>mvn clean verify -Dhexaglue.skip=trueOptions YAML
hexaglue.yaml, placé à la racine du projet (à côté du pom.xml), centralise la configuration de HexaGlue et de tous ses plugins.Les options ci-dessous se configurent dans la section
plugins.io.hexaglue.plugin.audit: du fichier YAML.Les 3 propriétés de failure (
failOnError, errorOnBlocker, errorOnCritical) sont unifiées entre Maven et YAML. Précédence : Maven POM / -D > YAML > defaults.| Option | Type | Défaut |
|---|---|---|
failOnError | boolean | true |
errorOnBlocker | boolean | true |
errorOnCritical | boolean | false |
generateDocs | boolean | false |
plugins: io.hexaglue.plugin.audit: errorOnBlocker: true # Défaut errorOnCritical: false # Défaut generateDocs: false # DéfautContraintes DDD
| ID | Nom | Sévérité |
|---|---|---|
ddd:entity-identity | Identité des entités | CRITICAL |
ddd:value-object-immutable | Immuabilité des VO | CRITICAL |
ddd:aggregate-cycle | Cycles entre agrégats | BLOCKER |
ddd:aggregate-repository | Repository par agrégat | MAJOR |
ddd:aggregate-boundary | Frontières d'agrégat | MAJOR |
ddd:aggregate-consistency | Cohérence d'agrégat | MAJOR |
ddd:domain-purity | Pureté du domaine | MAJOR |
ddd:event-naming | Nommage des événements | MINOR |
Contraintes d'architecture hexagonale
| ID | Nom | Sévérité |
|---|---|---|
hexagonal:dependency-direction | Direction des dépendances | BLOCKER |
hexagonal:port-interface | Ports = interfaces | CRITICAL |
hexagonal:dependency-inversion | Inversion de dépendance | CRITICAL |
hexagonal:layer-isolation | Isolation des couches | MAJOR |
hexagonal:port-direction | Direction des ports | MAJOR |
hexagonal:port-coverage | Couverture des ports | MAJOR |
hexagonal:application-purity | Pureté applicative | MAJOR |
Niveaux de sévérité
Les deux niveaux les plus élevés (
BLOCKER et CRITICAL) peuvent faire échouer la compilation, ce qui garantit que les violations graves sont corrigées avant le déploiement.| Niveau | Impact sur le build |
|---|---|
| BLOCKER | Build échoue immédiatement, non contournable |
| CRITICAL | Build échoue si errorOnCritical: true |
| MAJOR | Avertissement, le build continue |
| MINOR | Information, faible priorité |
Métriques calculées
| Métrique | Ce qu'elle mesure | ||
|---|---|---|---|
| DDD et Domaine | |||
domain.coverage | Proportion des types classifiés dans la couche domaine | ||
domain.purity | Proportion des types du domaine sans dépendance d'infrastructure | ||
ddd.value.object.ratio | Ratio de value objects par rapport aux types du domaine (entités + VO) | ||
ddd.event.coverage | Proportion des agrégats émettant au moins un événement de domaine | ||
ddd.aggregate.coupling | Nombre moyen de dépendances inter-agrégats | ||
| Agrégats | |||
aggregate.avgSize | Nombre moyen de méthodes par aggregate root | ||
aggregate.boundary | Proportion des entités encapsulées dans leur agrégat | ||
aggregate.repository.coverage | Proportion des agrégats ayant un port repository | ||
aggregate.coupling.efferent | Instabilité moyenne des packages (couplage efférent) | ||
| Architecture hexagonale | |||
hexagonal.adapter.independence | Indépendance des adapters entre eux (REST ne dépend pas de JPA) | ||
| Qualité du code | |||
code.boilerplate.ratio | Proportion de code boilerplate (getters, setters, equals) dans le domaine | ||
code.complexity.average | Complexité cyclomatique moyenne des méthodes du domaine | ||
| Modularité et structure | |||
architecture.propagation.cost | Coût de propagation : impact moyen d'un changement sur le système | ||
architecture.cyclicity.relative | Proportion de types impliqués dans des cycles de dépendances | ||
architecture.dependency.depth | Profondeur maximale de la chaîne de dépendances | ||
architecture.fan.out.max | Dépendances sortantes du type le plus couplé | ||
architecture.modularity.q | Modularité de Newman-Girvan (> 0.3 = bonne structure communautaire) | ||
architecture.mmi | Index de maturité modulaire de Lilienthal (0-100) | ||
architecture.visibility.average | Visibilité relative moyenne : ratio de types publics par package | ||
architecture.cohesion.relational | Cohésion relationnelle H : dépendances internes par package | ||
La métrique domain.purity détecte les imports d'infrastructure dans le domaine : JPA (javax.persistence, jakarta.persistence), Spring (org.springframework), Hibernate, Jackson, JDBC, SDKs cloud (AWS, Azure, GCP), messaging (Kafka, RabbitMQ), et les frameworks web/validation.

Formats de sortie
La sortie console (avec couleurs ANSI) est toujours active en complément. Les fichiers sont générés dans
target/hexaglue/reports/audit/.| Format | Usage |
|---|---|
| JSON | Consommation programmatique, intégration avec des outils CI/CD |
| HTML | Consultation web, rapport partageable avec CSS intégré |
| Markdown | Versionnage Git, intégration GitHub, documentation |
| Console | Affichage terminal avec couleurs ANSI (toujours actif) |
15 contraintes, 20 métriques, un rapport.
Configurez l'audit en quelques lignes.
Voyez les résultats de l'audit sur un projet réel ou explorez les contraintes et métriques disponibles.