An open API service indexing awesome lists of open source software.

https://github.com/octylfractal/java-preloader-reloadeder

A JDK version manager
https://github.com/octylfractal/java-preloader-reloadeder

java jdk rust version-manager

Last synced: over 1 year ago
JSON representation

A JDK version manager

Awesome Lists containing this project

README

          

java-preloader-reloadeder
=========================
[![Crates.io](https://img.shields.io/crates/v/jpre?style=flat-square)](https://crates.io/crates/jpre)

Replacement for my old [gist](https://gist.github.com/octylFractal/d85e0b160d8be75dbca29910a2b34f34).

Downloads JDKs from [foojay DiscoAPI](https://api.foojay.io/swagger-ui/) and stores them in `/jpre/jdks`.
`` is based on [
`directories`](https://docs.rs/directories/latest/directories/struct.ProjectDirs.html#method.cache_dir).

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:

```sh
# 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 `.
The default JDK can be set using `jpre default `.

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.