Replacement for my old gist.
Downloads JDKs from foojay DiscoAPI and stores them in <cache dir>/jpre/jdks.
<cache dir> is based on
directories.
Preferred distribution can be set in the config (also directories-based), defaults to temurin.
Run cargo install jpre to get the jpre binary.
Then, do the following (or similar) in your shell's startup script:
# This may be necessary to ensure the context is understood everywhere
export JPRE_CONTEXT_ID="$(jpre get-context-id)"
# Sets the Java home to the jpre-managed location. This will be symlinked to the currently active JDK.
export JAVA_HOME="$(jpre java-home)"
# Puts the binaries on your path
export PATH="$JAVA_HOME/bin:$PATH"
# Potentially optional, forces shell to re-scan for `java` et. al
hash -rNote that if you do not set a default JDK (with jpre default), the symlinked path will lead nowhere!
Run e.g. jpre use 17, this downloads Temurin JDK 17 and makes it the active JDK.
Other major versions can be downloaded and configured using jpre use <major>.
The default JDK can be set using jpre default <major>.
Full details are available by running jpre help.
jpre uses the parent process ID as a key to determine the symlink location. This makes it work per-shell (or other
process) and not interfere with other sessions. The symlink is in the jpre cache directory and is updated every time
a JDK is selected.
In order to prevent cross-session pollution, java-home clears any existing symlink before creating a new one.