JBang 25.11
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
.javay ejecutarlo inmediatamente - Omitir la configuración del proyecto: Sin
pom.xml, sinbuild.gradleni 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
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
Para consultar la documentación completa de JBang, visita:
- Primeros pasos con JBang - Instalación y conceptos básicos
- Referencia de directivas de script - Todas las directivas disponibles
- Dependencias - Administración avanzada de dependencias
Crear un script de webforJ
Crea un archivo llamado HelloWorld.java con el siguiente contenido:
///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ínea | Propósito |
|---|---|
///usr/bin/env jbang "$0" "$@" ; exit $? | Línea shebang que permite ejecutar el script directamente en sistemas Unix |
//JAVA 21 | Especifica la versión mínima de Java necesaria; JBang la descarga automáticamente si es necesario |
//DEPS com.webforj:webforj-jbang-starter:25.11 | Declara el starter de JBang de webforJ como dependencia mediante coordenadas de Maven |
@SpringBootApplication | Habilita la configuración automática de Spring Boot |
extends App | Convierte 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.
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:
- Descargar las dependencias (solo la primera vez)
- Compilar el script
- Iniciar el servidor integrado en un puerto aleatorio disponible
- 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.
| Propiedad | Valor predeterminado | Descripción |
|---|---|---|
webforj.jbang.auto-shutdown | true | Activa o desactiva el cierre automático |
webforj.jbang.idle-timeout | 5 | Segundos 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ón | Valor | Descripción |
|---|---|---|
server.port | 0 | Asignación de un puerto aleatorio para evitar conflictos al ejecutar varios scripts |
server.shutdown | immediate | Cierre rápido para finalizar scripts sin demora |
spring.main.banner-mode | off | Oculta el banner de Spring Boot para que la salida sea más limpia |
logging.level.root | ERROR | Registro mínimo para mantener limpia la salida de la consola |
logging.level.com.webforj | WARN | Muestra solo advertencias y errores de webforJ |
webforj.devtools.browser.open | true | Abre 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:
- Detén el script en ejecución (cierra la pestaña del navegador o pulsa Ctrl+C)
- Edita el código
- 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.
Connecting webforJ to your stack?
Ask the team about your libraries, services, and build.
