Saltar al contenido principal

JBang 25.11

Abrir en ChatGPT

JBang es una herramienta que permite ejecutar código Java como scripts, sin archivos de compilación, configuración de proyectos ni compilación manual. La integración de JBang con webforJ permite crear aplicaciones webforJ rápidamente, ideales para la creación rápida de prototipos, el aprendizaje y las demostraciones, sin necesitar las dependencias ni la infraestructura tradicionales de un programa Java completo.

Por qué usar JBang con webforJ​

Los proyectos webforJ tradicionales usan Maven o Gradle, con varios archivos de configuración y una estructura de proyecto estándar. Esta configuración es habitual en aplicaciones de producción, pero puede resultar pesada para experimentos o demostraciones sencillas.

Con JBang, puedes:

  • Empezar al instante: Escribir un único archivo .java y ejecutarlo inmediatamente
  • Omitir la configuración del proyecto: Sin pom.xml, sin build.gradle ni estructura de directorios
  • Compartir fácilmente: Enviar a alguien un único archivo que pueda ejecutar con un comando
  • Aprender más rápido: Centrarse en los conceptos de webforJ sin la complejidad de las herramientas de compilación

La integración incluye el cierre automático del servidor al cerrar la pestaña del navegador, lo que permite mantener limpio el flujo de trabajo de desarrollo.

Requisitos previos​

Instalar JBang​

Elige el método de instalación que prefieras:

# 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 predeterminada de Java

Cuando ejecutas JBang por primera vez sin tener un JDK instalado, JBang descarga uno 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
Más información sobre JBang

Para consultar la documentación completa de JBang, visita:

Crear 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 final FlexLayout self = getBoundComponent();
private TextField hello = new TextField("What is your name?");
private Button btn = new Button("Say Hello");

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("Welcome to webforJ JBang Starter " + hello.getValue() + "!", Theme.GRAY));

self.add(hello, btn);
}
}

Comprender la estructura del script​

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

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

Versión

Reemplaza 25.11 por la versión más reciente de webforJ. Consulta Maven Central para ver la versión más reciente.

Añadir dependencias​

Puedes añadir dependencias adicionales de Maven mediante varias 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 usan las coordenadas estándar de Maven (groupId:artifactId:version). JBang las descarga automáticamente de Maven Central la primera vez que se ejecuta el script.

Ejecutar el script​

Ejecuta el script con JBang:

jbang HelloWorld.java

JBang hará lo siguiente:

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

Hacer que el script sea 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 al principio del archivo.

Compatibilidad con IDE​

JBang se integra con IDE de Java populares, como VS Code, IntelliJ IDEA, Eclipse y otros. Estas integraciones ofrecen funciones como autocompletado de directivas, resolución automática de dependencias y la posibilidad de ejecutar y depurar scripts directamente desde el IDE.

Consulta la documentación de integración de JBang con IDE para obtener instrucciones de configuración e información sobre los editores compatibles.

Configuración​

El starter de JBang para webforJ incluye valores predeterminados adecuados para crear scripts. Puedes personalizar el comportamiento mediante propiedades del sistema.

Cierre automático​

De forma predeterminada, el servidor se cierra automáticamente cuando se cierran todas las pestañas del navegador conectadas a la aplicación. Así se mantiene limpio el flujo de trabajo de desarrollo y se evita que queden servidores huérfanos en ejecución.

PropiedadValor predeterminadoDescripción
webforj.jbang.auto-shutdowntrueActiva o desactiva el cierre automático
webforj.jbang.idle-timeout5Segundos que se esperan después de la desconexión del último navegador antes de cerrar el servidor

Para desactivar el cierre automático:

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

Para cambiar el tiempo de espera de inactividad:

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

Configuración predeterminada​

El starter de JBang configura los siguientes valores predeterminados:

ConfiguraciónValorDescripción
server.port0Asignación de un puerto aleatorio para evitar conflictos al ejecutar varios scripts
server.shutdownimmediateCierre rápido para finalizar scripts sin demora
spring.main.banner-modeoffOculta el banner de Spring Boot para que la salida sea más limpia
logging.level.rootERRORRegistro mínimo para mantener limpia la salida de la consola
logging.level.com.webforjWARNMuestra solo advertencias y errores de webforJ
webforj.devtools.browser.opentrueAbre el navegador automáticamente al iniciar la aplicación

Redespliegue y recarga en vivo​

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

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

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

Pasar a un proyecto completo​

Cuando el prototipo deje de caber en un único archivo, crea un proyecto formal con startforJ o el arquetipo de Maven. Puedes copiar directamente la lógica del script en la estructura del proyecto generado.

Sigue aprendiendo