Project-aware
Bind each repository to the Maven executable, JDK, and settings it actually needs, instead of relying on a vague global environment.
A single dev machine often runs Maven builds that target several different Java
versions, such as Java 8, Java 17, and Java 21. Without jup, every project
switch means manually editing JAVA_HOME and PATH, keeping track of which
Java version and which Maven each repository needs, and occasionally dealing
with projects that rely on different settings.xml files. It all gets tedious.
javaup (command: jup) takes care of this for you. It automatically detects
the Java version a Maven project needs, picks a matching local JDK, and
remembers the Maven executable, JDK, and optional settings.xml path that
project uses. It then runs the build in a fresh child process, leaving your
machine’s environment variables and your current shell completely untouched —
safe, convenient, and fast.
flowchart LR
subgraph before["Before: no jup, all manual"]
direction TB
A["switch projects"] --> B["manually edit<br/>JAVA_HOME + PATH"]
B --> C["remember this project's<br/>Maven + settings.xml"]
C --> D["manually run the build"]
D -->|"repeat this routine"| A
end
subgraph after["Now: with jup, fully automatic"]
direction TB
E["run jup run mvn<br/>from any terminal"] --> F["jup auto-loads<br/>your saved toolchain"]
F --> G["jup auto-matches<br/>JDK + Maven + settings.xml"]
G --> H["build in an<br/>isolated process"]
end
before ~~~ after
Project-aware
Bind each repository to the Maven executable, JDK, and settings it actually needs, instead of relying on a vague global environment.
Build from anywhere
Select an initialized project and run its build without switching directories or reassembling the environment by hand.
Fits your toolchain
Prefer Maven Wrapper and discover JDKs installed by tools such as SDKMAN! and asdf, or exposed through environment variables and PATH.
Cross-platform
Works on Windows, macOS, and Linux, on both amd64 and arm64.
cd /path/to/your/maven-projectjup initjup statusjup run mvn clean package