Spring Migrator to Quarkus
Extensión de Visual Studio Code que agrega el participante de chat @migrator para ejecutar migraciones de aplicaciones Spring Boot a Quarkus 3.x de forma autónoma, fase por fase, con compilación y commit automático por cada etapa completada.
La extensión trae empaquetados los prompts y la skill de migración, por lo que puede funcionar aunque el proyecto que estás migrando no tenga una carpeta .github.
Marketplace
Requisitos
- Visual Studio Code
1.90.0 o superior.
- GitHub Copilot Chat o un proveedor compatible con VS Code Language Model API.
- Maven (
mvn) disponible en el PATH (para el modo autónomo).
- Git disponible en el PATH.
- Node.js
16.x o superior para desarrollo.
Instalación para desarrollo
- Abre este repositorio en VS Code.
- Instala dependencias:
npm install
- Compila la extensión:
npm run compile
- Presiona
F5 para abrir una ventana Extension Development Host.
Flujo recomendado: migración autónoma
La forma más sencilla de usar la extensión es con los dos comandos principales:
Paso 1 — Inicializar
@migrator /init
Escanea todos los módulos Spring Boot detectados en el workspace y muestra un QuickPick para que selecciones el que quieres migrar. Al confirmar:
- Crea la carpeta
{modulo}-migrate/ en la raíz del workspace.
- Crea la rama git
migration/{modulo}.
- Guarda el estado inicial en
{modulo}-migrate/.migration-state.json.
Si ya existe una migración en progreso, te pregunta si quieres retomar la anterior o iniciar una nueva.
Paso 2 — Migrar
@migrator /migrate
Ejecuta el orquestador que recorre las fases en este orden:
setup → assess → test → config → service → rest → rxjava → retrofit → infra → validate → summary
Para cada fase:
- El LLM lee el código fuente original usando las herramientas del workspace.
- Escribe los archivos migrados en
{modulo}-migrate/ usando la herramienta workspace_write_file.
- Compila con
mvn clean compile -DskipTests.
- Si compila: hace un commit automático
[migrator] {fase}: migrate {modulo} y avanza.
- Si falla: envía los errores de compilación al LLM para que los corrija y reintenta hasta 3 veces.
- Al finalizar todas las fases, muestra un resumen con cuántas completó y los commits generados.
Si interrumpes el proceso, al volver a ejecutar /migrate retoma desde la última fase pendiente (las fases con estado done se saltan automáticamente).
Comandos disponibles
Orquestador (flujo autónomo)
| Comando |
Descripción |
/init |
Escanea módulos Spring, permite seleccionar uno, crea {modulo}-migrate/, rama git y estado inicial. |
/migrate |
Ejecuta todas las fases en secuencia con compilación y commit automático por cada una. |
Pasos individuales (control manual)
Puedes ejecutar cada fase de forma independiente si prefieres controlar el proceso paso a paso:
| Comando |
Alias exacto |
Descripción |
/setup |
/00-setup-migration-project |
Inicializa estructura, pom.xml y scripts base de Quarkus. |
/assess |
/01-assess-module |
Analiza dependencias, patrones Spring y riesgos de migración. |
/test |
/02-tdd-before-migrate |
Genera pruebas @QuarkusTest como contrato antes de migrar. |
/config |
/03-migrate-config |
Migra configuración Spring a application.yml y @ConfigProperty. |
/service |
/04-migrate-service |
Migra servicios @Service a beans CDI @ApplicationScoped. |
/service-simple |
/04a-migrate-simple-service |
Migra servicios simples sin DB ni cache. |
/service-repository |
/04b-migrate-service-repository |
Migra pares @Service + @Repository a CDI + Panache. |
/service-cache |
/04c-migrate-service-cache |
Migra Spring Cache a Quarkus Cache/Redis. |
/rest |
/05-migrate-rest-resource |
Migra @RestController a recursos JAX-RS @Path. |
/rxjava |
/06-migrate-rxjava |
Convierte Single/Observable/Completable a Mutiny. |
/retrofit |
/07-migrate-retrofit |
Convierte Retrofit a MicroProfile REST Client. |
/infra |
/08-migrate-infra |
Migra Redis, seguridad, mensajería e infraestructura. |
/validate |
/09-validate-migration |
Valida código migrado con checklist Quarkus. |
/summary |
/10-migration-summary |
Genera reporte final de auditoría y readiness. |
Pasos avanzados
| Comando |
Alias exacto |
Descripción |
/aop |
/11-migrate-aop |
Migra Spring @Aspect a interceptores CDI. |
/events |
/12-migrate-events |
Migra ApplicationEvent/@EventListener a CDI Events. |
/scheduled |
/13-migrate-scheduled |
Migra tareas @Scheduled a Quarkus Scheduler. |
/troubleshooting |
/troubleshooting |
Diagnostica errores comunes de compilación, runtime y tests. |
Utilidades
| Comando |
Descripción |
Spring Migrator: Ver dashboard de telemetría |
Muestra funnel de uso por comando (paleta de comandos). |
Ejemplos
Flujo autónomo completo
@migrator /init
→ Aparece QuickPick con los módulos detectados. Seleccionas src/main/java/com/acme/orders.
→ Se crea orders-migrate/, rama migration/orders, y .migration-state.json.
@migrator /migrate
→ El orquestador ejecuta setup → assess → ... → summary.
→ Cada compilación exitosa genera un commit. Si falla, el LLM corrige y recompila.
Control manual por paso
@migrator /assess src/main/java/com/acme/orders
@migrator /service src/main/java/com/acme/orders/OrderService.java
@migrator /service-repository OrderService.java OrderRepository.java
@migrator /rxjava src/main/java/com/acme/orders/ReactiveOrderService.java
Usando alias exactos
@migrator /04b-migrate-service-repository src/main/java/com/acme/orders
Estado de migración
Cuando usas /init + /migrate, la extensión guarda el estado en {modulo}-migrate/.migration-state.json:
{
"module": "orders",
"sourcePath": "src/main/java/com/acme/orders",
"targetFolder": "orders-migrate",
"branch": "migration/orders",
"startedAt": "2026-04-24T10:00:00Z",
"phases": {
"setup": { "status": "done", "commitSha": "abc1234", "completedAt": "..." },
"assess": { "status": "done", "commitSha": "def5678", "completedAt": "..." },
"config": { "status": "in-progress", "attempts": 2 },
"service": { "status": "pending", "attempts": 0 }
}
}
Estados posibles por fase: pending, in-progress, done, failed.
Al ejecutar /migrate de nuevo, las fases con estado done se saltan y continúa desde la primera pendiente o fallida.
Herramientas del workspace
Cuando el LLM necesita información real del proyecto, dispone de estas herramientas:
| Herramienta |
Descripción |
workspace_find_files |
Busca archivos por glob (p. ej. **/src/main/java/**/*.java). |
workspace_read_file |
Lee el contenido de cualquier archivo del workspace. |
workspace_search_text |
Busca texto o patrones en archivos con ruta y número de línea. |
terminal_run |
Ejecuta comandos seguros: mvn, ./mvnw, gradle, rg, find, ls, git status/diff/log. |
workspace_write_file |
Escribe o sobreescribe archivos dentro de {modulo}-migrate/ (disponible solo en modo orquestador). |
debug_start_configuration |
Lista o inicia configuraciones de debug de .vscode/launch.json. |
Creación y modificación de archivos
Modo manual (pasos individuales):
- Solo se crean archivos nuevos mediante bloques
migrator-artifacts en la respuesta del modelo.
- Los archivos existentes nunca se sobrescriben.
- Se rechazan rutas absolutas y rutas con
...
Modo orquestador (/migrate):
- El LLM usa
workspace_write_file para escribir directamente en {modulo}-migrate/.
- Permite sobreescribir archivos ya creados en esa carpeta durante los reintentos de compilación.
- Nunca puede escribir fuera de la carpeta de migración.
Telemetría mínima (opt-in)
- Setting:
springMigratorToQuarkus.telemetry.enabled (defecto: false)
- Si se activa, registra solo metadatos técnicos: nombre de comando/tool, duración, conteos y estado de ejecución.
- No se envía código fuente, rutas completas ni datos personales.
- Dashboard: paleta de comandos →
Spring Migrator: Ver dashboard de telemetría.
Configuración de build del orquestador
springMigratorToQuarkus.build.timeoutProfile: short (30s), medium (120s), long (300s).
springMigratorToQuarkus.build.maxRetries: reintentos máximos por fase (default: 3).
springMigratorToQuarkus.build.retryBackoffMs: backoff base entre reintentos (default: 2000 ms).
Desarrollo
npm run watch # TypeScript en modo observación
npm run compile # Compilación única
npm run lint # ESLint
npm run test # Tests unitarios
Después de modificar src/extension.ts, recarga la ventana con Developer: Reload Window.
Estructura principal
src/
├── extension.ts # Punto de entrada, registra @migrator y comandos
└── migrator/
├── engine.ts # Orquestador principal, /init, /migrate, loop compilación-commit
├── migration-state.ts # Estado persistente por fase en .migration-state.json
├── tools.ts # Herramientas del workspace para el LLM
├── prompts.ts # Construcción de mensajes y parseo de frontmatter
├── artifacts.ts # Creación segura de archivos desde respuestas del modelo
├── workspace.ts # Análisis del workspace (pom.xml, módulos Java)
├── security.ts # Allowlist de comandos de terminal
├── constants.ts # Definiciones de comandos, secuencia de fases, límites
└── types.ts # Tipos TypeScript compartidos
resources/migration/
├── copilot-instructions.md # Reglas globales de arquitectura (DDD, Java 21, etc.)
├── copilot-skills/migration-skill.md # Skill de 11 pasos
└── prompts/ # 18 prompts especializados (uno por fase)