Saltar al contenido principal

JBang 25.11

Abrir en ChatGPT

JBang es una herramienta que te permite ejecutar código Java como scripts, sin archivos de construcción, configuración de proyectos o compilación manual. La integración de webforJ con JBang te permite crear aplicaciones webforJ rápidamente, siendo más adecuada para prototipos rápidos, aprendizaje y demostraciones rápidas, sin necesidad de las dependencias e infraestructura tradicionales de un programa Java completo.

¿Por qué usar JBang con webforJ?

Los proyectos tradicionales de webforJ utilizan Maven o Gradle con múltiples archivos de configuración y una estructura de proyecto estándar. Esta configuración es común para aplicaciones de producción, pero puede parecer pesada para experimentos o demostraciones simples.

Con JBang, puedes:

  • Comenzar instantáneamente: Escribir un único archivo .java y ejecutarlo de inmediato
  • Saltar la configuración del proyecto: Sin pom.xml, sin build.gradle, sin estructura de directorios
  • Compartir fácilmente: Enviar a alguien un solo archivo que puede ejecutar con un comando
  • Aprender más rápido: Concentrarte en los conceptos de webforJ sin la complejidad de herramientas de construcción

La integración incluye el cierre automático del servidor cuando cierras la pestaña del navegador, manteniendo limpio tu flujo de trabajo de desarrollo.

Requisitos previos

Instalar JBang

Elige tu método de instalación preferido:

# Universal (Linux/macOS/Windows con bash)
curl -Ls https://sh.jbang.dev | bash -s - app setup

# SDKMan
sdk install jbang

# Homebrew (macOS)
brew install jbangdev/tap/jbang

# Chocolatey (Windows)
choco install jbang

# Scoop (Windows)
scoop install jbang

Verifica la instalación:

jbang --version
Versión de Java predeterminada

Cuando ejecutas JBang por primera vez sin un JDK instalado, JBang lo descarga automáticamente. Puedes establecer la versión y el proveedor del JDK antes de ejecutar JBang:

export JBANG_DEFAULT_JAVA_VERSION=21
export JBANG_JDK_VENDOR=temurin
Aprender más sobre JBang

Para una documentación completa de JBang, consulta:

Creando un script de webforJ

Crea un archivo llamado HelloWorld.java con el siguiente contenido:

HelloWorld.java
///usr/bin/env jbang "$0" "$@" ; exit $?
//DEPS com.webforj:webforj-jbang-starter:25.11
//JAVA 21

package bang;

import com.webforj.App;
import com.webforj.annotation.Routify;
import com.webforj.component.Composite;
import com.webforj.component.Theme;
import com.webforj.component.button.Button;
import com.webforj.component.button.ButtonTheme;
import com.webforj.component.field.TextField;
import com.webforj.component.icons.FeatherIcon;
import com.webforj.component.layout.flexlayout.FlexDirection;
import com.webforj.component.layout.flexlayout.FlexLayout;
import com.webforj.component.toast.Toast;
import com.webforj.router.annotation.Route;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@Routify
public class HelloWorld extends App {
public static void main(String[] args) {
SpringApplication.run(HelloWorld.class, args);
}
}

@Route("/")
class MainView extends Composite<FlexLayout> {

private FlexLayout self = getBoundComponent();
private TextField hello = new TextField("¿Cuál es tu nombre?");
private Button btn = new Button("Di Hola");

public MainView() {
self.setDirection(FlexDirection.COLUMN);
self.setMaxWidth(300);
self.setStyle("margin", "1em auto");

btn.setPrefixComponent(FeatherIcon.BELL.create())
.setTheme(ButtonTheme.PRIMARY)
.addClickListener(e -> Toast.show("¡Bienvenido a webforJ JBang Starter " + hello.getValue() + "!", Theme.GRAY));

self.add(hello, btn);
}
}

Entendiendo la estructura del script

LíneaPropósito
///usr/bin/env jbang "$0" "$@" ; exit $?Línea shebang que permite la ejecución directa del script en sistemas Unix
//JAVA 21Especifica la versión mínima de Java requerida; JBang la descarga automáticamente si es necesario
//DEPS com.webforj:webforj-jbang-starter:25.11Declara el iniciador de webforJ JBang como una dependencia usando coordenadas de Maven
@SpringBootApplicationHabilita la auto-configuración de Spring Boot
extends AppHace de esta clase una aplicación webforJ

La dependencia webforj-jbang-starter incluye todo lo necesario para ejecutar una aplicación webforJ: el iniciador de Spring Boot, herramientas de desarrollo y apertura automática del navegador.

Versión

Reemplaza 25.11 con la última versión de webforJ. Consulta Maven Central para la versión más reciente.

Agregando dependencias

Puedes agregar dependencias de Maven adicionales usando múltiples líneas //DEPS:

///usr/bin/env jbang "$0" "$@" ; exit $?
//JAVA 21
//DEPS com.webforj:webforj-jbang-starter:25.11
//DEPS com.google.code.gson:gson:2.11.0
//DEPS org.apache.commons:commons-lang3:3.14.0

Las dependencias utilizan coordenadas estándar de Maven (groupId:artifactId:version). JBang las obtiene automáticamente de Maven Central en la primera ejecución.

Ejecutando tu script

Ejecuta el script con JBang:

jbang HelloWorld.java

JBang hará:

  1. Descargar dependencias (solo en la primera ejecución)
  2. Compilar el script
  3. Iniciar el servidor embebido en un puerto aleatorio disponible
  4. Abrir tu navegador predeterminado a la aplicación

Haciendo el script ejecutable

En sistemas Unix, puedes hacer que el script sea directamente ejecutable:

chmod +x HelloWorld.java
./HelloWorld.java

Esto funciona gracias a la línea shebang en la parte superior del archivo.

Soporte de IDE

JBang se integra con IDEs de Java populares, incluyendo VS Code, IntelliJ IDEA, Eclipse y otros. Estas integraciones proporcionan características como autocompletado de directivas, resolución automática de dependencias y la capacidad de ejecutar y depurar scripts directamente desde el IDE.

Consulta la documentación de integración de IDE de JBang para obtener instrucciones de configuración y editores compatibles.

Configuración

El iniciador de webforJ JBang incluye configuraciones predeterminadas sensatas optimizadas para scripting. Puedes personalizar el comportamiento utilizando propiedades del sistema.

Cierre automático

Por defecto, el servidor se cierra automáticamente cuando se cierran todas las pestañas del navegador conectadas a la aplicación. Esto mantiene limpio tu flujo de trabajo de desarrollo al no dejar servidores huérfanos en ejecución.

PropiedadPredeterminadoDescripción
webforj.jbang.auto-shutdowntrueActivar o desactivar el cierre automático
webforj.jbang.idle-timeout5Segundos a esperar después de que la última desconexión del navegador ocurra antes de apagarse

Para desactivar el cierre automático:

jbang -Dwebforj.jbang.auto-shutdown=false HelloWorld.java

Para cambiar el tiempo de espera inactivo:

jbang -Dwebforj.jbang.idle-timeout=30 HelloWorld.java

Configuraciones predeterminadas

El iniciador de JBang configura los siguientes valores predeterminados:

ConfiguraciónValorDescripción
server.port0Asignación de puerto aleatorio para evitar conflictos al ejecutar múltiples scripts
server.shutdownimmediateCierre rápido para una rápida terminación del script
spring.main.banner-modeoffOculta el banner de Spring Boot para una salida más limpia
logging.level.rootERRORRegistro mínimo para mantener la salida de la consola limpia
logging.level.com.webforjWARNMuestra solo advertencias y errores de webforJ
webforj.devtools.browser.opentrueAbre automáticamente el navegador cuando la aplicación se inicia

Redeployment y recarga en vivo

Los scripts de JBang no admiten recarga en vivo. Para ver los cambios:

  1. Detén el script en ejecución (cierra la pestaña del navegador o presiona Ctrl+C)
  2. Edita tu código
  3. Ejecuta jbang HelloWorld.java nuevamente

Para la redeployment automática durante el desarrollo, considera usar un proyecto completo de Maven con Spring DevTools. Consulta la documentación de recarga en vivo para más detalles.

Transición a un proyecto completo

Cuando tu prototipo crezca más allá de un solo archivo, crea un proyecto adecuado usando startforJ o el arquetipo de Maven. Puedes copiar la lógica de tu script directamente en la estructura de proyecto generada.