From 40dda44902c2733da308b63f955c7eb14709c71c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20Jes=C3=BAs=20Mart=C3=ADnez=20Mimbrera?= Date: Sat, 23 May 2026 00:39:14 +0200 Subject: [PATCH] public code v2 --- README.md | 100 +++++++++++++++++++++++------------------------------- build.bat | 22 ++++++++---- run.bat | 58 +++++++++++++++++++++++++++++++ run.sh | 36 ++++++++++++++------ 4 files changed, 141 insertions(+), 75 deletions(-) create mode 100644 run.bat diff --git a/README.md b/README.md index e058524..79d9dda 100644 --- a/README.md +++ b/README.md @@ -23,35 +23,61 @@ Flintstones permite definir un problema de decisión (alternativas, criterios, e ## Requisitos -| Herramienta | Versión mínima | Notas | -|---|---|---| -| Docker | 20+ | Para compilar sin instalar nada más | -| Java | 11 | Solo para ejecutar el producto compilado | -| Maven | 3.8+ | Solo si compilas fuera de Docker | +El único requisito es tener **Docker Desktop** instalado. Todo lo demás (Java 11, Maven, GTK…) corre dentro del contenedor. -> **Sin Docker:** necesitas JDK 11 y Maven 3.8+. -> **Con Docker:** solo Docker. El contenedor lleva Maven 3.8.6 y JDK 11. +| Herramienta | Versión mínima | Dónde conseguirla | +|---|---|---| +| Docker Desktop | 20+ | [docker.com/products/docker-desktop](https://www.docker.com/products/docker-desktop/) | + +> En Windows, Docker Desktop debe estar en modo **Linux containers** (es el modo por defecto). --- -## Compilar +## Compilar y ejecutar -### Con Docker (recomendado) +### macOS / Linux ```bash -./build.sh +./run.sh ``` -O directamente: +### Windows + +```bat +run.bat +``` + +Eso es todo. El script gestiona automáticamente cada situación: + +| Situación | Qué hace el script | +|---|---| +| Primera vez | Compila el proyecto + construye la imagen Docker + arranca + abre el navegador | +| Ya compilado, imagen ya construida | Solo arranca el contenedor + abre el navegador | +| Ya está corriendo | Abre el navegador directamente | + +La primera compilación descarga dependencias de Eclipse (~1-2 GB) y tarda unos minutos. Las siguientes arrancan en segundos. + +La aplicación aparece en el navegador en **`http://localhost:6080`** — no hace falta instalar ningún cliente VNC ni ningún visor especial. + +Para parar la aplicación: ```bash -docker compose run --rm build +docker compose stop run # macOS / Linux +``` +```bat +docker compose stop run :: Windows ``` -La primera vez descarga dependencias de Eclipse (~1-2 GB). Las siguientes compilaciones usan caché y son mucho más rápidas. +### Solo compilar (sin ejecutar) -Los productos quedan en: +```bash +./build.sh # macOS / Linux +``` +```bat +build.bat :: Windows +``` +Los productos compilados quedan en: ``` releng/flintstones.application.product/target/products/ RCP product-linux.gtk.x86_64.zip @@ -59,7 +85,9 @@ releng/flintstones.application.product/target/products/ RCP product-win32.win32.x86_64.zip ``` -### Sin Docker +### Sin Docker (avanzado) + +Requiere JDK 11 y Maven 3.8+ instalados localmente: ```bash mvn clean install -Dmaven.test.skip=true @@ -67,48 +95,6 @@ mvn clean install -Dmaven.test.skip=true --- -## Ejecutar - -### macOS - -```bash -cd releng/flintstones.application.product/target/products/ -unzip "RCP product-macosx.cocoa.x86_64.zip" -open Eclipse.app -``` - -> El ejecutable se llama `Eclipse.app` por herencia del launcher de Eclipse RCP. -> En Apple Silicon (M1/M2/M3) funciona vía Rosetta 2 (arquitectura x86_64). - -### Linux - -```bash -cd releng/flintstones.application.product/target/products/ -unzip "RCP product-linux.gtk.x86_64.zip" -./"RCP product"/linux/gtk/x86_64/flinstones -``` - -Requiere GTK3: -```bash -sudo apt install libgtk-3-0 # Debian/Ubuntu -``` - -### Linux con VNC (desde Docker) - -Levanta el contenedor con display virtual accesible en `localhost:5900`: - -```bash -docker compose run --rm run-vnc -``` - -Conéctate con cualquier cliente VNC (RealVNC, TigerVNC, etc.) a `localhost:5900`. - -### Windows - -Descomprime `RCP product-win32.win32.x86_64.zip` y ejecuta `flinstones.exe`. - ---- - ## Métodos disponibles ### Métodos clásicos / Ranking diff --git a/build.bat b/build.bat index 8cdfa8c..fc48678 100644 --- a/build.bat +++ b/build.bat @@ -1,10 +1,18 @@ -:: Hacer los SET +@echo off +:: Compila Flintstones en Docker (no hace falta tener Maven ni Java 11 local). +setlocal -:: Actualizar POM +set APP_DIR=releng\flintstones.application.product\target\products -:: Build -mvn clean install +echo =^> Compilando Flintstones con Maven 3.8 + JDK 11 en Docker... +docker compose run --rm build +if errorlevel 1 ( + echo ERROR: la compilacion ha fallado. + exit /b 1 +) -pause -pause -pause \ No newline at end of file +echo. +echo =^> Build completado. Productos en %APP_DIR%\ +dir /b "%APP_DIR%\*.zip" 2>nul + +endlocal diff --git a/run.bat b/run.bat new file mode 100644 index 0000000..96461f2 --- /dev/null +++ b/run.bat @@ -0,0 +1,58 @@ +@echo off +:: Levanta Flintstones en Docker y abre el navegador automaticamente. +setlocal + +set APP_DIR=releng\flintstones.application.product\target\products\RCP product\linux\gtk\x86_64 +set IMAGE=flintstones-develop-run +set URL=http://localhost:6080/vnc.html?autoconnect=true^&resize=scale + +:: 1. Compilar si no existe el binario +if not exist "%APP_DIR%\eclipse" ( + echo =^> Proyecto no compilado. Compilando (esto tarda la primera vez)... + docker compose run --rm build + if errorlevel 1 goto error +) + +:: 2. Construir imagen de ejecucion si no existe +docker image inspect %IMAGE% >nul 2>&1 +if errorlevel 1 ( + echo =^> Construyendo imagen Docker de ejecucion (solo la primera vez)... + docker compose build run + if errorlevel 1 goto error +) + +:: 3. Arrancar el contenedor +docker compose ps run | findstr "running" >nul 2>&1 +if errorlevel 1 ( + echo =^> Arrancando Flintstones... + docker compose up -d run + if errorlevel 1 goto error +) else ( + echo =^> Flintstones ya esta en marcha. +) + +:: 4. Esperar a que noVNC este listo +echo =^> Esperando conexion... +:wait +curl -s http://localhost:6080 >nul 2>&1 +if errorlevel 1 ( + timeout /t 1 /nobreak >nul + goto wait +) + +:: 5. Abrir el navegador +echo =^> Abriendo %URL% +start "" "%URL%" + +echo. +echo Para parar: docker compose stop run +echo Para los logs: docker compose logs -f run +goto end + +:error +echo. +echo ERROR: algo ha fallado. Revisa los logs con: docker compose logs run +exit /b 1 + +:end +endlocal diff --git a/run.sh b/run.sh index cd98b31..ea91a37 100755 --- a/run.sh +++ b/run.sh @@ -1,32 +1,46 @@ #!/bin/bash # Levanta Flintstones en Docker y abre el navegador automáticamente. -# Requiere que el proyecto esté compilado (./build.sh). set -e APP_DIR="releng/flintstones.application.product/target/products/RCP product/linux/gtk/x86_64" +IMAGE="flintstones-develop-run" +URL="http://localhost:6080/vnc.html?autoconnect=true&resize=scale" +# 1. Compilar el proyecto si no existe el binario if [ ! -f "$APP_DIR/eclipse" ]; then - echo "==> El proyecto no está compilado. Compilando primero..." + echo "==> Proyecto no compilado. Compilando (esto tarda la primera vez)..." docker compose run --rm build fi -echo "==> Construyendo imagen de ejecución..." -docker compose build run +# 2. Construir la imagen de ejecución si no existe +if ! docker image inspect "$IMAGE" > /dev/null 2>&1; then + echo "==> Construyendo imagen Docker de ejecución (solo la primera vez)..." + docker compose build run +fi -echo "==> Arrancando Flintstones..." -docker compose up -d run +# 3. Arrancar el contenedor (o reutilizarlo si ya corre) +if docker compose ps run | grep -q "running"; then + echo "==> Flintstones ya está en marcha." +else + echo "==> Arrancando Flintstones..." + docker compose up -d run +fi -echo "==> Esperando a que el servidor esté listo..." +# 4. Esperar a que noVNC esté listo +echo -n "==> Esperando conexión" for i in $(seq 1 30); do if curl -s http://localhost:6080 > /dev/null 2>&1; then + echo " lista." break fi + echo -n "." sleep 1 done -echo "==> Abriendo navegador en http://localhost:6080/vnc.html?autoconnect=true" -open "http://localhost:6080/vnc.html?autoconnect=true" +# 5. Abrir el navegador +echo "==> Abriendo $URL" +open "$URL" echo "" -echo "Para parar la aplicación: docker compose stop run" -echo "Para ver los logs: docker compose logs -f run" +echo " Para parar: docker compose stop run" +echo " Para los logs: docker compose logs -f run"