Java Versions
jbang
will by default use JAVA_HOME
and if not available, check the PATH
to locate the java
executable to run the script with.
If your script requires a specific or minimal version of Java you can use //JAVA <version>(+)
.
If JBang finds a java executable using JAVA_HOME
or PATH
which satisfies the stated java version jbang will use it.
If no such version is found it will automatically download and install it.
Examples:
//JAVA 11
will force use of Java 11.
//JAVA 13+
will require at least java 13. Java 13 or higher will be used.
In case no matching java
is found jbang
will fail.
You can always force running with specific version of java
using --java
command line option, i.e.
jbang --java 8 hello.java
Managing JDKs
In the previous section it was mentioned that JBang will automatically download and install JDKs when necessary.
You can use the jdk
command to manage JDKs, for example you can run the following:
jbang jdk list
which will list all the JDKs that are currently installed by JBang.
It’s easy to install
additional JDKs by running:
jbang jdk install 14
which will download and install JDK version 14 into JBang’s cache (~/.jbang/cache/jdks
by default).
The list of versions that are available for installation can be found here: https://adoptopenjdk.net/releases.html
The first JDK that gets installed by JBang will be set as the "default" JDK. This is from then on the JDK that will be
used by JBang if no Java could be found on the system (meaning javac
wasn’t found on the PATH
and no JAVA_HOME
is set).
You can change the default JDK by running:
jbang jdk default 12
Running it without an argument will return the version of the JDK that is currently set as the default.
When you uninstall
a JDK by running:
jbang jdk uninstall 12
and that JDK was set as the default, JBang will set the next higher version JDK as the default. If no higher version is available it will select the next lower version.
Using managed JDKs yourself
Given the fact that JBang is able to easily download and install JDKs we thought that it might be a good option for our users to be able to access those JDKs for their own use instead of having to install yet another version themselves.
To make that easy we added a couple of useful commands. The first can be used to set retrieve to location where the JDK is installed:
jbang jdk home
This will return the path to the "default" JDK (by default ~/.jbang/currentjdk)
, if you want to know the location of a
specific JDK you can pass the version as an argument: jbang jdk home 14
. This command could be used by scripts to find
a JDK to use to run a Java program for example (eg: JAVA_HOME=$(jbang jdk home)
.
The install
command decribed in the previous section allows you to specify the path of your existing JDK installation:
jbang jdk install 17 <path-of-existing-java-17-installation>
So if you are managing your jdk installations with SDKMAN! you can easilly configure JBang to use one of your installed version:
jbang jdk install 17 `sdk home java 17.0.4.1-tem`
For setting up your current command line environment there’s something simpler. You can run:
jbang jdk java-env
On Linux, Mac and AIX this will output something like:
export PATH="/home/user/.jbang/currentjdk/bin:$PATH"
export JAVA_HOME="/home/user/.jbang/currentjdk"
# Run this command to configure your shell:
# eval $(jbang jdk java-env)
And the output itself shows how to properly use it to configure your command line to use the JDK. In this case it’s by running:
eval $(jbang jdk java-env)
To do this by default for all shells you start simply add the above line to your ~/.bashrc
file.
Unfortunately on Windows using CMD things are not as easy as is show by the output of jbang jdk java-env
on that platform:
set PATH=C:\Users\user\.jbang\currentjdk\bin;%PATH%
set JAVA_HOME=C:\Users\user\.jbang\currentjdk
rem Copy & paste the above commands in your CMD window or add
rem them to your Environment Variables in the System Settings.
Instead of copying and pasting lines you could also redirect the output to a .bat file and execute that instead:
> jbang jdk java-env > setenv.bat > setenv