JDK Tool Access from JShell - Sip of Java
Billy Korando on October 23, 2023
The JShell Tool, a REPL originally added in JDK 9, has been updated in JDK 21 to provide better access to JDK tools. Let’s take a look!
The TOOLING Script
Accessing JDK tools from JShell requires loading the new TOOLING script. It can be loaded on JShell initialization with the following command:
$ jshell TOOLING
Or loaded from within JShell with the /open command like below:
jshell> /open TOOLING
Using JDK Tools in JShell
The TOOLING script gives access to the following JDK tools:
jarjavacjavadocjavapjdepsjmodjlinkjpackage
The tools are loaded as methods in JShell, and the type of argument(s) the tool will take will vary. In the example below, javap takes a Class argument:
jshell> [tool-name](Object args…)
jshell> interface Empty {}
jshell> javap(Empty.class)
However, jar would take an array of String:
jshell> jar("--create", \
"--file=target/HelloWorld-jshell.jar", \
"--main-class=my.org.HelloWorld",\ "my/org/HelloWorld.class")
Advantages of Using JShell
An advantage of using JDK tools from JShell is that JShell is platform agnostic and will handle things like file path conversions, so this command using jar would work on Linux, macOS, and Windows:
jshell> jar("--create", \
"--file=target/HelloWorld-jshell.jar", \
"--main-class=my.org.HelloWorld",\
"my/org/HelloWorld.class")
Additional Reading
JShell Tooling - Christian Stein
Happy coding!
