Show Menu
Cheatography

Unleash the power of Java https://www.jbang.dev/

Simple JBang Hello.java

///usr/bin/env jbang "$0" "$@" ; exit $? 

class Hello { 
    public static void main(String[] args) {
          System.out.println("Hello World!");
    }
}

Run JBang script

$ jbang Hello.java
$ jbang --debug Hello.java
$ chmod u+x 
$ ./Hello.java

Templates

$ jbang template list
$ jbang init --template=cli helloworld.java

ChatGPT - init script from ChatGPT

$ jbang init HelloCli.java "generate hello command with picocli library"
You need an OPENAI­_AP­I_KEY enviro­nment variable.

Editing

 
$ jbang edit hellow­orl­d.java
$ jbang edit --open­=code hellow­orl­d.java
$ jbang edit --open­=idea hellow­orl­d.java

Assign Java version

//JAVA 8
Assigned version in Script
//JAVA 11+
Java 11 or higher
jbang --java 8 Hello.java
Assigned version from CLI
jbang jdk list --avai­lable
List available JDKs
If you don't assign Java version, and JBang will run the script with Java 17 by default.

java and javac Options

//JAVAC_OPTIONS -parameters
//JAVA_OPTIONS -Dnick=xxx
//JAVA_OPTIONS -Dserver.port=8081 -D spring.application.name=app1
//PREVIEW

Java preview

///usr/bin/env jbang "$0" "$@" ; exit $? 

//PREVIEW
//JAVA 21

void main() {
    System.out.println("Hello World");
}

Multiple Java source files

//SOURCES UserService.java
//SOURCES impl/UserServiceImpl.java

Multi resource files - proper­tie­s/xml etc

//FILES application.properties
//FILES META-INF/resources/index.html=index.html
//FILES META-INF/resources/jquery.js=https://code.jquery.com/jquery-3.6.0.min.js
//FILES templates/HelloWorld.txt.mtl=templates/HelloWorld.txt.mtl

Resource import format: //FILES <mountpoint>[=<sourcefile>]

Polyglot - Kotlin

///usr/bin/env jbang "$0" "$@" ; exit $? 

//KOTLIN 1.8.21
//DEPS org.jetbrains.kotlin:kotlin-bom:1.8.21@pom
//DEPS org.jetbrains.kotlin:kotlin-stdlib

public fun main() {
    println("Hello World");
}

Polyglot - Groovy

///usr/bin/env jbang "$0" "$@" ; exit $? 

//GROOVY 4.0.12

println("Hello World");

Polyglot - JShell

///usr/bin/env jbang "$0" "$@" ; exit $?
//DEPS net.datafaker:datafaker:1.9.0

import net.datafaker.Faker;

Faker faker = new Faker();
$ jbang demo.jsh
$ jbang --inte­ractive demo.jsh

JBang native

 

Depend­encies

//DEPS systems.manifold:manifold-all:2023.1.10
//DEPS org.projectlombok:lombok:1.18.28
//DEPS org.slf4j:slf4j-simple:2.0.7
//DEPS libs/local.jar

Managed depend­encies by BOM - Spring Boot

//DEPS org.springframework.boot:spring-boot-dependencies:2.7.11@pom
//DEPS org.springframework.boot:spring-boot-starter

Managed depend­encies by BOM - Quarkus

//DEPS io.quarkus:quarkus-bom:2.9.2.Final@pom
//DEPS io.quarkus:quarkus-resteasy

Reposi­tories

//REPOS central,spring-release=https://repo.spring.io/release
//REPOS central,spring-milestone=https://repo.spring.io/milestone

Well-known repositories:

* central - https://repo1.maven.org/maven2/
* google - https://maven.google.com/
* jitpack - https://jitpack.io/

Aliases

$ jbang alias add --name hello https://github.com/jbangdev/jbang-examples/blob/HEAD/examples/helloworld.java
$ jbang hello 
$ jbang alias list
$ jbang alias list --show-origin

Catalogs - jbang-­cat­alo­g.json

{
  "aliases": {
    "hello": {
      "script-ref": "hello.java",
      "description": "Script that says hello back for each argument"
    }
}

Catalogs - local jbang-­cat­alo­gs.json

1. jbang-­cat­alo­g.json in current directory
2. jbang-­cat­alo­g.json in parent directory util the root diretory
3. $HOME/.jb­ang­/jb­ang­-ca­tal­og.json

Catalogs - implicit catalog from GitHub

jbang hello@acme
hello alias in acme/j­ban­g-c­ata­log­/jb­ang­-ca­tal­og.json
jbang hello@­acm­e/m­yca­talog
hello alias in acme/m­yca­tal­og/­jba­ng-­cat­alo­g.json
jbang hello@­acm­e/m­yca­tal­og/dev
hello alias in acme/m­yca­tal­og/­jba­ng-­cat­alo­g.json in dev branch
jbang hello@­acm­e~e­xpe­rim­ental
hello alias in acme/j­ban­g-c­ata­log­/ex­per­ime­nta­l/j­ban­g-c­ata­log.json

Catalogs - management

$ jbang catalog add --name acme acme
$ jbang catalog add --name mycatalog acme/mycatalog
$ jbang catalog list

Tips

jbang --fresh
Use none-c­ached resources
jbang info tools Hello.java
Prints a json descri­ption of JBang script

Apps - setup jbang to put scripts into your PATH

$ jbang app install <scriptRef> 
$ $ jbang app install --name app1 <scriptRef> 
$ jbang app list
$ jbang app uninstall <name>

build.java

///usr/bin/env jbang "$0" "$@" ; exit $?
//JAVA 17
//DEPS info.picocli:picocli:4.7.3
//SOURCES src
//FILES resources

JBang export - generate jar or native binary

jbang export fatjar
Exports an executable fat jar with all depend­encies
jbang export portable
Exports jar together with depend­encies in pom.xml
jbang export native
Exports native executable
jbang export mavenrepo
Exports directory that can be used to publish as a maven repository
jbang export jlink
Export app with Java runtime embedded

JBang with ChatGPT

export OPENAI_API_KEY=sk-xxxxxxx-x-xxxxxx
jbang init gh.java "connect to github an fetch all repositories under jbangdev and collect how many stars they have"
 

Comments

No comments yet. Add yours below!

Add a Comment

Your Comment

Please enter your name.

    Please enter your email address

      Please enter your Comment.

          More Cheat Sheets by linux_china

          Justfile Cheat Sheet
          httpx Cheat Sheet
          zawk Cheat Sheet