11 releases
0.3.0 | Oct 15, 2024 |
---|---|
0.2.9 | Sep 25, 2021 |
0.2.8 | Jul 30, 2021 |
0.2.7 | Mar 20, 2021 |
0.1.0 | Sep 27, 2020 |
#70 in Build Utils
87KB
2K
SLoC
java-preloader-reloadeder
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
.
Installation
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 -r
Note that if you do not set a default JDK (with jpre default
), the symlinked path will lead nowhere!
Usage
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
.
How it works
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.
Dependencies
~20–32MB
~506K SLoC