-
Notifications
You must be signed in to change notification settings - Fork 0
Comandos
Los cuatro CLIs comparten flags comunes: --engine static|dynamic|auto, --config <path>, --quiet y --json. Toda la salida de esta página se generó ejecutando los comandos contra tests/fixtures/leaf_coupling (10 módulos), así que es reproducible.
El proyecto de ejemplo
leaf_couplingtiene este grafo:app → cart, checkout, core;cart, checkout → payments;payments → core, database, model, network, util;database, model, network, util → core; ylegacy → app.
gradle-analyzer <ruta_al_modulo>| Flag | Descripción | Default |
|---|---|---|
--format plantuml|mermaid|all |
Formato de salida | all |
--output-dir <dir> |
Directorio de salida | diagrams |
--engine static|dynamic|auto |
Motor de extracción | static |
--exclude <module> |
Excluir un módulo (puede repetirse) | — |
--focus <module[,module]> |
Limitar el grafo a estos módulos y sus vecinos | — |
--config <path> |
Ruta a analyzer_config.json
|
auto-detect |
--quiet |
Suprime output de progreso | off |
--json |
Salida JSON a stdout | off |
Genera: diagrams/gradle-dependencies.puml · .mmd · gradle-report.txt
Salida real
$ gradle-analyzer tests/fixtures/leaf_coupling
🚀 Analizador de Dependencias via Gradle
======================================================================
📁 Escaneando módulos en: .../tests/fixtures/leaf_coupling
• app
• cart
• checkout
• core
• database
• legacy
• model
• network
• payments
• util
✓ 10 módulos encontrados
🔍 Analizando dependencias (motor: static)...
✓ app: 3 dependencia(s)
✓ cart: 1 dependencia(s)
✓ checkout: 1 dependencia(s)
○ core: sin dependencias internas
✓ database: 1 dependencia(s)
✓ legacy: 1 dependencia(s)
✓ model: 1 dependencia(s)
✓ network: 1 dependencia(s)
✓ payments: 5 dependencia(s)
✓ util: 1 dependencia(s)
✓ Análisis completado: 15 dependencias detectadas
📊 Generando archivos...
======================================================================
✓ PlantUML: diagrams/gradle-dependencies.puml
✓ Mermaid: diagrams/gradle-dependencies.mmd
✓ Reporte: diagrams/gradle-report.txtEl reporte de texto (gradle-report.txt) lista dependencias por módulo y estadísticas:
======================================================================
DEPENDENCIAS POR MÓDULO
======================================================================
📦 app
→ cart [implementation]
→ checkout [implementation]
→ core [implementation]
📦 payments
→ core [implementation]
→ database [implementation]
→ model [implementation]
→ network [implementation]
→ util [implementation]
...
======================================================================
ESTADÍSTICAS
======================================================================
Módulos más utilizados:
• core: usado por 6 módulo(s)
• payments: usado por 2 módulo(s)
...
Módulos sin dependencias internas (1):
• core
Módulos no utilizados por otros (1):
• legacy
Ejemplos:
gradle-analyzer /ruta/proyecto/payments --format mermaid # solo Mermaid
gradle-analyzer /ruta/proyecto/payments --exclude test-utils # excluir módulos
gradle-analyzer /ruta/proyecto/payments --output-dir docs/diagrams # output customgradle-externals <ruta_proyecto> <nombre_modulo>Responde: "¿qué módulos de fuera de mi feature lo están consumiendo?" — clave antes de un refactor.
| Flag | Descripción | Default |
|---|---|---|
--format plantuml|mermaid|all |
Formato de salida | all |
--output-dir <dir> |
Directorio de salida | external-calls |
--engine static|dynamic|auto |
Motor de extracción | static |
--config <path> |
Config personalizado | auto-detect |
--quiet |
Suprime output de progreso | off |
--json |
Salida JSON a stdout | off |
Genera: external-calls/<modulo>-external-calls.puml · .mmd · <modulo>-external-report.txt
Salida real
$ gradle-externals tests/fixtures/leaf_coupling payments
======================================================================
ANÁLISIS DE LLAMADAS EXTERNAS A PAYMENTS
======================================================================
Proyecto: .../tests/fixtures/leaf_coupling
Módulo analizado: payments
======================================================================
MÓDULOS EXTERNOS QUE LLAMAN
======================================================================
📦 cart
└─→ payments [implementation]
📦 checkout
└─→ payments [implementation]
======================================================================
ESTADÍSTICAS
======================================================================
Módulos más llamados desde fuera:
• payments: 2 llamada(s)gradle-sanity <ruta_al_modulo>| Flag | Descripción | Default |
|---|---|---|
--output-dir <dir> |
Directorio de salida | sanity |
--engine static|dynamic|auto |
Motor de extracción | static |
--config <path> |
Config personalizado | auto-detect |
--quiet |
Suprime output de progreso | off |
--json |
Salida JSON a stdout | off |
--fail-on-cycle |
exit 1 si se detecta algún ciclo |
off |
--fail-on-score-below N |
exit 1 si el score es menor a N |
off |
El detalle de qué mide cada métrica y cómo se calcula el score está en Métricas de sanidad.
Salida real (tabla de métricas)
$ gradle-sanity tests/fixtures/leaf_coupling
...
======================================================================
MÉTRICAS POR MÓDULO
======================================================================
Módulo Ca Ce I Estado
────────────────────────────── ──── ──── ────── ──────────────────────────────
app 1 3 0.75 🟠 Moderadamente inestable
cart 1 1 0.50 🟡 Moderadamente estable
checkout 1 1 0.50 🟡 Moderadamente estable
core 6 0 0.00 🟢 Estable
database 1 1 0.50 🟡 Moderadamente estable
legacy 0 1 1.00 🔴 Inestable (módulo hoja)
model 1 1 0.50 🟡 Moderadamente estable
network 1 1 0.50 🟡 Moderadamente estable
payments 2 5 0.71 🟠 Moderadamente inestable
util 1 1 0.50 🟡 Moderadamente estable======================================================================
PUNTUACIÓN DE SANIDAD
======================================================================
Puntaje base: 100
Ciclos (0 × 20 pts): -0
Violaciones SDP (0 × 10 pts): -0
Api innecesario (0 × 5 pts): -0
Fan-out excesivo (0 × 3 pts): -0
Versiones hardcodeadas (0 × 2 pts): -0
Lógica compartida mal ubicada (2 issue(s)): -0
───────────────────────────────────────────────────
PUNTUACIÓN FINAL: 100 / 100
Resultado: 🟢 Excelente — arquitectura de dependencias muy sanaSalida JSON (--json, ideal para CI)
$ gradle-sanity tests/fixtures/leaf_coupling --json --quiet{
"path": "tests/fixtures/leaf_coupling",
"score": 100,
"modules": {
"core": { "ca": 6, "ce": 0, "I": 0.0 },
"payments": { "ca": 2, "ce": 5, "I": 0.71 },
"legacy": { "ca": 0, "ce": 1, "I": 1.0 }
},
"cycles": [],
"sdp_violations": [],
"api_issues": [],
"fan_out_issues": [],
"version_issues": [],
"orphan_modules": [],
"coupling_issues": [
{ "module": "app", "kind": "app", "I": 0.75, "ca": 1, "max_ca": 0 },
{ "module": "payments", "kind": "feature", "I": 0.71, "ca": 2, "max_ca": 1 }
]
}El bloque
modulesse muestra recortado: el JSON real incluye los 10 módulos.
gradle-impact <ruta_proyecto> <modulo>Responde: "¿qué módulos se rompen si cambio este módulo?" Construye el grafo invertido de dependencias y hace BFS desde el target, asignando un nivel a cada módulo impactado (1 = directo, 2 = transitivo, etc.).
| Flag | Descripción | Default |
|---|---|---|
--format plantuml|mermaid|all |
Formato de salida | all |
--output-dir <dir> |
Directorio de salida | impact |
--engine static|dynamic|auto |
Motor de extracción | static |
--config <path> |
Config personalizado | auto-detect |
--quiet |
Suprime output de progreso | off |
--json |
Salida JSON a stdout | off |
Genera: impact/<modulo>-impact.puml · .mmd · <modulo>-impact-report.txt
Salida real
$ gradle-impact tests/fixtures/leaf_coupling core
======================================================================
IMPACTO DE CAMBIOS EN: CORE
======================================================================
Proyecto : .../tests/fixtures/leaf_coupling
Módulo : core
Total módulos : 10
Nivel 1 — dependientes directos (6):
• app
• database
• model
• network
• payments
• util
Nivel 2 — dependientes transitivos (3):
• cart
• checkout
• legacy
🔥 Impacto total: 9 módulos (90% del proyecto)
Cambiar core requiere verificar 9 módulo(s).En
leaf_coupling,corees el módulo base: tocarlo impacta al 90% del proyecto. Es exactamente lo que las métricas de sanidad marcan conCa=6, I=0.00(muy estable → muchos dependen de él).
Los .puml y .mmd son texto; para convertirlos a PNG/SVG:
plantuml diagrams/gradle-dependencies.puml # PNG
plantuml -tsvg diagrams/gradle-dependencies.puml # SVG (escalable)brew install plantuml # macOS
sudo apt install plantuml # Ubuntu/Debian
choco install plantuml # WindowsLos .mmd los renderiza GitHub directamente (bloque ```mermaid) o mermaid.live.