LuxCore

Empezar

De cero a un servidor respondiendo, en cuatro órdenes. No hace falta nada más que git, Maven y un JDK 21.

01

Instalación

LuxCore no está publicado en Maven Central todavía. Se instala compilándolo desde el repositorio, que deja los artefactos en tu repositorio local de Maven.

~/proyectos

Requisitos: git, Maven y un JDK 21 o superior. Nada más — LuxCore no tiene dependencias externas.

Después, en tu pom.xml, toma solo lo que uses:

pom.xmlXML
<dependency>
    <groupId>lux</groupId>
    <artifactId>lux-core</artifactId>   <!-- arrastra lux-http -->
    <version>0.2.0</version>
</dependency>

<!-- opcionales -->
<dependency><groupId>lux</groupId><artifactId>lux-view</artifactId><version>0.2.0</version></dependency>
<dependency><groupId>lux</groupId><artifactId>lux-data</artifactId><version>0.2.0</version></dependency>

<!-- el driver JDBC lo pone tu aplicación -->
<dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId><version>42.7.3</version></dependency>
Aplicación de ejemplo

java/ejemplo es un gestor de tareas completo —vistas, formularios, H2 y API REST— con 36 pruebas de punta a punta. Es el mejor sitio por donde empezar a leer.

02

En cinco minutos

Un controlador es una clase corriente. Lo que devuelve decide el formato: un objeto se serializa a JSON, un String sale como texto plano, null es un 204. Sin anotación de por medio.

Hola.javaJava
import lux.core.*;

@Route("/api/tareas")
public class TareaController {

    @Inject Tareas tareas;

    @Get
    public Object listar(@Query(value = "pagina", orElse = "1") int pagina) {
        return tareas.findPage(pagina, 20);
    }

    @Get("/{id}")
    public Object ver(@Path("id") long id) {
        return tareas.findById(id);
    }

    @Post
    public Object crear(@Body @Valid Tarea tarea) {
        return Result.created(tareas.insert(tarea));
    }
}

public static void main(String[] args) {
    Lux.run(8080, TareaController.class);
}

Eso es todo. Lux.run registra las rutas, levanta el servidor e imprime el puerto y el tiempo de arranque. No hay web.xml, ni contenedor, ni despliegue.

Con todo declarado

App.javaJava
Server servidor = Lux.app()
    .port(8080)
    .loadConfig()
    .views(Templates.fromClasspath("plantillas"))
    .fallback(StaticFiles.fromClasspath("estaticos", "/estaticos"))
    .service(new Catalogo())
    .authenticator(ctx -> sesiones.verificar(ctx.header("Authorization")))
    .use(Cors.allowing("https://app.pe"))
    .use(Csrf.enabled().exempt("/api/"))
    .use(RateLimit.perMinute(300))
    .controllers(TareaController.class, AdminController.class)
    .routes(r -> r.get("/salud", ctx -> "ok"))
    .start();

servidor.await();  // bloquea hasta que se apague