Ether Framework
Unified API docs for Ether modules
Loading...
Searching...
No Matches
Guía práctica: ether-hexagonal-archetype

ether-hexagonal-archetype es un arquetipo Maven que genera un proyecto multi-módulo con arquitectura hexagonal (puertos y adaptadores) completo y listo para producción, usando el framework Ether con Jetty 12 y PostgreSQL.

Instalación

No se añade como dependencia — se usa para generar un nuevo proyecto:

mvn archetype:generate \
-DarchetypeGroupId=dev.rafex.ether \
-DarchetypeArtifactId=ether-hexagonal-archetype \
-DarchetypeVersion=1.0.0 \
-DgroupId=com.example \
-DartifactId=myapp \
-Dversion=0.1.0-SNAPSHOT \
-Dpackage=com.example.myapp \
-DjavaVersion=21 \
-DetherVersion=9.0.0 \
-DinteractiveMode=false

Parámetros

Parámetro Defecto Descripción
groupId com.example Group ID de Maven
artifactId myapp-parent Nombre base del proyecto
version 0.1.0-SNAPSHOT Versión inicial
package com.example.myapp Paquete raíz Java
javaVersion 21 Versión Java
etherVersion 9.0.0 Versión del framework Ether

Estructura generada

myapp-parent/
├── pom.xml ← Parent POM con dependencyManagement
├── Makefile ← Build: compile, test, quality, install
├── Justfile ← Tasks: run, docker, db, migrate
├── mvnw ← Maven Wrapper
├── config/
│ ├── checkstyle/ ← Reglas Checkstyle
│ ├── spotless/ ← Cabecera de licencia
│ └── owasp/ ← Supresiones OWASP
├── myapp-ports/ ← Interfaces del dominio (puertos)
├── myapp-common/ ← Config, errores, utilidades compartidas
├── myapp-core/ ← Lógica de negocio (servicios, use-cases)
├── myapp-infra-postgres/ ← Repositorios JDBC (adaptador de salida)
├── myapp-bootstrap/ ← DI con ether-di (contenedor)
├── myapp-transport-jetty/ ← Servidor HTTP Jetty (adaptador de entrada)
├── myapp-transport-grpc/ ← Placeholder gRPC
├── myapp-transport-rabbitmq/ ← Placeholder RabbitMQ
├── myapp-tools/ ← Scripts y herramientas de soporte
└── myapp-architecture-tests/ ← Tests ArchUnit (reglas arquitectónicas)

Reglas de arquitectura (ArchUnit)

El módulo myapp-architecture-tests verifica en tiempo de compilación que:

  • myapp-core no depende de myapp-infra-* ni de myapp-transport-*
  • myapp-ports no depende de ningún módulo interno
  • myapp-transport-* solo depende de myapp-ports y myapp-bootstrap

Comandos habituales

Build (Make)

make build # Compilar todos los módulos
make test # Ejecutar tests
make quality # Checkstyle + Spotless + OWASP
make install # Instalar en repositorio Maven local (sin tests)
make install-full # Instalar con tests
make package # Crear fat-jar del transport-jetty

Desarrollo (Just)

just run # Compilar y ejecutar la aplicación
just run-debug # Ejecutar con LOG_LEVEL=DEBUG
just watch # Reiniciar al detectar cambios .java (requiere entr)
just docker-build # Construir imagen Docker
just up # Levantar servicios con docker compose
just down # Parar servicios
just migrate # Aplicar migraciones de BD (Flyway/Liquibase)
just db-shell # Shell interactivo PostgreSQL
just ci # Pipeline CI completo

Lo que incluye el proyecto generado

  • Arquitectura hexagonal verificada por ArchUnit
  • Servidor HTTP Jetty 12 con ether-http-jetty12
  • PostgreSQL con HikariCP y ether-jdbc
  • DI explícita con ether-di (sin reflexión)
  • Config 12-factor con ether-config
  • JWT con ether-jwt
  • Logging con ether-logging-core
  • Calidad de código: Checkstyle, Spotless, OWASP Dependency Check
  • Docker y docker-compose.yml preconfigurados

Construir e instalar el arquetipo localmente

cd ether-archetype
./mvnw clean install

Más información