JEX Starters
JEX Starters es una extension de Visual Studio Code con snippets y generadores para acelerar desarrollos Java con Spring Boot.
Esta extension esta pensada para proyectos que sigan convenciones JEX, pero no es una publicacion oficial de ninguna administracion u organismo publico.
Caracteristicas
- Snippets Java y YAML con prefijo
jex-.
- Generacion de esqueleto de entidad Spring Boot desde la paleta de comandos.
- Creacion de clases base para controller, mapper, model, repository, servicios y validator.
- Generacion de tests unitarios asociados.
- Actualizacion de una plantilla OpenAPI base cuando el flujo de generacion lo requiere.
- Creacion de proyectos Spring Boot con las convenciones comunes del servicio.
- Aplicacion de configuracion estandar sobre proyectos Spring Boot existentes.
- Creacion de proyectos Laravel + React mediante el starter kit oficial.
- Creacion de aplicaciones independientes con React 18 y JavaScript.
- Creacion de aplicaciones Spring Boot + React 18 en una estructura conjunta.
Uso
Proyecto estandar
Para crear un proyecto nuevo con las convenciones comunes, ejecuta:
Jex Starters: Crear Proyecto Estandar
La extension descargara el proyecto desde Spring Initializr y aplicara la configuracion compartida: pom.xml, recursos, OpenAPI, Logback, .vscode, GitLab CI, .versionrc, .gitignore y scripts locales. La receta no fija una version concreta de Spring Boot: deja que Spring Initializr genere la version 4 disponible y despues anade la configuracion comun sobre ese proyecto. Java queda configurado en 21.
El proyecto queda preparado como WAR para servidor externo: spring-boot-starter-tomcat se marca como provided, se conserva o genera ServletInitializer, y se incluyen tareas de VS Code para arrancar en local y generar el WAR con el perfil dev.
Para aplicar esa misma configuracion sobre el proyecto abierto, ejecuta:
Jex Starters: Aplicar Configuracion Estandar
El comando es idempotente: anade o actualiza configuracion comun, conserva archivos existentes que no debe sobrescribir y muestra un resumen final.
Proyecto Laravel + React
Para crear un monolito Laravel + React, ejecuta:
Jex Starters: Crear proyecto Laravel + React
El flujo se comporta como el comando de Spring Boot: solicita el nombre de la aplicacion, solicita la carpeta destino, muestra progreso, impide sobrescribir carpetas con contenido y ofrece abrir el proyecto creado.
Laravel no dispone de un endpoint ZIP equivalente a Spring Initializr. El comando usa Composer para ejecutar el mismo paquete que emplea el instalador oficial de Laravel al seleccionar React:
composer create-project laravel/react-starter-kit nombre-del-proyecto --stability=dev --no-interaction
Por tanto, requiere PHP 8.3 o superior y Composer disponibles en el equipo. Si el PHP disponible en el PATH no llega a 8.3, la extension avisa y permite indicar php.exe o la carpeta de una instalacion compatible; esa ruta puede guardarse en la configuracion jexStarters.php83Path para futuros proyectos. Composer descarga e instala el starter oficial, y el comando crea .env desde .env.example solo si el instalador no lo hubiera creado.
El starter oficial incluye Laravel, React, TypeScript, Inertia, Vite, Tailwind CSS y shadcn/ui en resources/js.
Al finalizar, el comando ofrece instalar las dependencias de frontend. Comprueba Node.js y npm; si falta alguna herramienta, conserva el proyecto generado y muestra el comando npm install para ejecutarlo manualmente.
Proyecto React 18 independiente
Para crear una aplicacion frontend independiente con JavaScript, ejecuta:
Jex Starters: Crear proyecto React 18 (JavaScript)
El comando usa el generador oficial de Vite con la variante react de JavaScript y despues fija React y React DOM en 18.3.1. Usa npm solo para invocar Vite y Yarn para las dependencias de la aplicacion: ejecuta yarn add fetchssoapi sweetalert2 loglevel, que añade las librerias al package.json e instala el conjunto de dependencias del proyecto en una sola operacion. No incluye TypeScript ni necesita Laravel, PHP o Composer. Se necesita Node.js, npm, Yarn e internet.
El starter incluye src/api/fetchBackEnd.js, src/api/api.js y src/helpers/functionalHelpers.js como base para las peticiones al backend. Al crear el proyecto, .env se genera desde .env.example con VITE_BACKEND=http://localhost:8080; también incluye VITE_MODIFIABLE_ENVIRONMENT y VITE_SSO_ENVIRONMENT. api.js ofrece operaciones CRUD genericas y maneja respuestas 401 con SweetAlert2; createUnauthorizedHandler permite conectar el login o cierre de sesion de cada aplicacion. El proyecto generado incluye README-api.md con ejemplos de uso.
El caso de uso createReact18Project acepta postCreateCommands, una lista de comandos que se ejecutan despues de generar el proyecto y copiar el cliente API. Esto permite ampliar mas adelante el generador con instalaciones de librerias, conservando el mismo flujo de creacion.
Una vez instaladas las dependencias, ejecuta:
npm run dev
Aplicacion Spring Boot + React 18
Ejecuta el comando:
Jex Starters: Crear aplicación Spring + React 18
El comando reutiliza los generadores de Spring Boot y React 18 y crea ambos proyectos dentro de una carpeta comun:
nombreaplicacion/
├── backend/ # Spring Boot, Java 21 y Maven
├── frontend/ # React 18, Vite y cliente API
├── .gitignore
└── README.md
Necesitas Java 21, Node.js, npm, Yarn e internet. Para iniciar el backend, ejecuta ./mvnw spring-boot:run desde backend (en Windows, mvnw.cmd spring-boot:run). Para iniciar React, ejecuta yarn dev desde frontend. El frontend toma la URL del backend de frontend/.env. El backend generado permite CORS desde http://localhost:5173 para desarrollo local.
El generador actual de Vite requiere Node.js 20.19+ o 22.12+; el comando comprueba ese requisito antes de crear el proyecto.
Generacion de entidad
Abre un proyecto Spring Boot en VS Code y ejecuta el comando:
Jex Starters: Generar Esqueleto de Entidad
La extension busca el pom.xml en la raiz del proyecto para detectar groupId y artifactId, y con esos datos calcula el packageName base.
Despues solicita el nombre de la entidad en singular y plural, en formato CamelCase. Por ejemplo:
Provincia
Provincias
Con esos datos genera archivos en src/main/java como:
controllers/ProvinciasController.java
mappers/ProvinciaMapper.java
models/Provincia.java
repositories/ProvinciaRepository.java
services/provincias/CrearProvincia.java
services/provincias/ActualizarProvincia.java
services/provincias/BorrarProvincia.java
services/provincias/ListarProvincias.java
services/provincias/ObtenerProvincia.java
validators/ProvinciaValidator.java
Tambien genera tests unitarios en src/test/java como:
controllers/ProvinciasControllerTest.java
mappers/ProvinciaMapperTest.java
models/ProvinciaTest.java
services/provincias/CrearProvinciaTest.java
services/provincias/ActualizarProvinciaTest.java
services/provincias/BorrarProvinciaTest.java
services/provincias/ListarProvinciasTest.java
services/provincias/ObtenerProvinciaTest.java
validators/ProvinciaValidatorTest.java
Snippets incluidos
Los snippets disponibles usan el prefijo jex-:
jex-entity
jex-entity-with-dates
jex-test-service
jex-test-controller
jex-service
jex-repository
jex-mapper
jex-openapi-endpoint
jex-endpoint-full-crud
jex-openapi-schemas
jex-service-create-unit-test
jex-service-findAll-unit-test
jex-service-findById-unit-test
Requisitos del proyecto
El generador asume un proyecto Spring Boot con:
pom.xml en la raiz del workspace.
- JUnit 5 y Mockito disponibles mediante las dependencias de test generadas por Spring Initializr.
- MapStruct configurado para generar la implementacion de los mappers.
- Entidades OpenAPI generadas con nombres como
ProvinciaSummary, ProvinciaDetail, ProvinciaCreate, ProvinciaDetailResponse y ProvinciasListResponse.
Desarrollo
Para probar la extension desde VS Code, abre esta carpeta en VS Code y ejecuta Run Extension desde el panel de depuracion, o pulsa F5 si esa configuracion esta seleccionada.
Se abrira una ventana nueva llamada Extension Development Host. En esa ventana abre un proyecto Spring Boot de prueba y ejecuta el comando Jex Starters: Generar Esqueleto de Entidad.
Ejecutar los tests:
npm run test:run
Empaquetar
Generar un .vsix instalable:
npm run package
Instalar el .vsix en VS Code:
Extensions: Install from VSIX...
Publicar en Visual Studio Marketplace
y subir a https://marketplace.visualstudio.com/manage/publishers/
Proximas versiones
Para publicar una nueva version, primero aplica los cambios de codigo o plantillas, ejecuta los tests y genera el paquete local:
npm run test:run
npm run package
Despues incrementa la version siguiendo SemVer:
commit-and-tag-version --release-as 0.3.5
Crea VSIX para publicar en https://marketplace.visualstudio.com/manage/publishers:
npx @vscode/vsce package --allow-missing-repository
Si en el futuro se adopta Conventional Commits, se puede automatizar el changelog, el commit y la etiqueta con commit-and-tag-version:
npm install --save-dev commit-and-tag-version
npm pkg set scripts.release="commit-and-tag-version"
npm run release
vsce publish