Java Scripting mit JBang

JBang ermöglicht die Ausführung von "self-contained" Java Dateien ohne ein Projekt anlegen zu müssen.

Auf dieser Seite findet ihr Beispiele und Ressourcen zu unserem JBang-Video. Die Beispieldateien könnt ihr auch als ZIP-Archiv herunterladen.

Installation

Auf der JBang Seite findest du Anleitungen für Windows, Linux und Mac. Es gibt Unterstützung für Paketmanager (Chocolatey, Scoop, asdf, brew, sdkman, ...) und Docker.

Beispiele

Hello World

public class hello { public static void main(String[] args) { System.out.println("Hello " + args[0]); } }
Listing: hello.java

Ausführen mit:

jbang hello.java Bonn


h2 Server

Das Skript startet einen h2-Datenbankserver. Die notwendige Abhängigkeit lädt JBang automatisch von Maven Central.

///usr/bin/env jbang "$0" "$@" ; exit $? //DEPS com.h2database:h2:2.3.230 //Java 21 import org.h2.tools.*; import static org.h2.tools.Server.*; public class h2 { public static void main(String[] ignored) throws Exception { Server server = createTcpServer("-ifNotExists").start(); System.out.println(server.getStatus()); } }
Listing: h2.java

SQL/JDBC Client

SQL Befehle können mit dem Skript sql.java an Datenbankserver über JDBC gesendet werden.

jbang sql.java "select * from fruits"


Kataloge

Hier findest du unseren JBang Catalog mit Aliasen auf github.

Java in der Kommandozeile

Java in der Kommandozeile geht mit JBang natürlich auch.

jbang -c 'println("Hi!")' ls -al | jbang -c 'lines().forEach(System.out::println)' ls -al | jbang -c 'lines().filter(l->!l.contains("total")).map(l->l.split("\\s+")).forEach(a->printf("Datei %s hat %s Bytes\n",a[8],a[4]))'


Faker

Mit Faker können Beispieldaten für Tests erzeugt werden. Das Skript erzeugt ein Faker-Objekt, das dann in der Kommandozeile verwendet werden kann.

//DEPS com.github.javafaker:javafaker:1.0.2 import com.github.javafaker.Faker; Faker faker = new Faker(new Locale("DE"));


Listung: faker.jsh

Die Einzeiler unten verwenden das Faker-Objekt um Beispieldaten zu erzeugen:

jbang -s faker.jsh -c 'Stream.generate(faker.hitchhikersGuideToTheGalaxy()::quote).forEach(n->println(n))' jbang -s faker.jsh -c \n 'Stream.generate(()->faker.address()).forEach(a->printf("%s %s\n%s %s\n\n", a.streetName(), a.streetAddressNumber(), a.zipCode(), a.city()))'


Markdown

In Markdown eingebettetes Java...

# JBang Markdown Ausführen von Skripten in Markdown. ```jsh //DEPS com.github.ricksbrown:cowsay:1.1.0 import com.github.ricksbrown.cowsay.*; System.out.println(Cowsay.say(args)); ```
Listing: cow.md

kann mit JBang ebenfalls ausgeführt werden:

jbang cow.md


Sonstige Kommandos

jbang edit h2.java jbang export fatjar h2.java jbang org.membrane-soa:starter:5.7.0 -h jbang https://raw.githubusercontent.com/predic8/jbang-catalog/refs/heads/main/sql.java "select * from fruits" jbang alias add https://raw.githubusercontent.com/predic8/jbang-catalog/refs/heads/main/sql.java jbang membrane@predic8 -c proxies.xml jbang gavsearch@demo log4j jbang --java 21 --enable-preview -c 'print(STR."First arg is \{args[0]}!")' jbang jdk list