StackLeader Blog

Docker + JShell + Bash Alias Tip
Overview
This post brings together two of my favorite things: bash aliases/functions and docker containers. To those who have not heard, Java 9 will include a new Java REPL called JShell. This is exciting in a number of ways. Newcomers to the language should find the learning curve less painful, and seasoned developers will gain a useful tool for exploring new libraries and interactive programming. JShell has already become a tool I use daily, and it has largely replaced my habit of writing disposable JUnit tests simply to explore a new library’s behavior or work out a specific function.
With some help from docker, you can easily start exploring JShell.
JShell with Docker
The following command uses the official openjdk docker hub image.
Launch JShell
docker run --rm=true -it openjdk:9 jshell
Bash Alias/Function Convenience
To get the most value out of your JShell experience, you will likely want to add library jars to your classpath. This can easily be accomplished using a volume mount and a small modification to our jshell command. For convenience, I have the following bash functions defined to make launching a JShell instance with a useful classpath convenient.
Adding a lib directory to the classpath
function jshell(){
docker run --rm=true -it -v ~/utils/jshell/libs:/tmp/context openjdk:9 /usr/bin/jshell -classpath "/tmp/context/*"
}
Adding your current directory to the classpath
function jshellpwd(){
docker run --rm=true -it -v ${PWD}:/tmp/context openjdk:9 /usr/bin/jshell -classpath "/tmp/context/*"
}