Reference
The whole surface of jpx is one target and a handful of flags:
jpx [--modular] [--docker[=<image>]] [--hash=<checksum>] <target> [argument...]
Flags come before the target; everything after the target is passed to the launched program. The target
grammar, <name>[@<version>][/<main-class>], is covered in Choosing a target.
| Flag | What it does |
|---|---|
--modular |
Resolve purely over module descriptors, walking requires clauses like the modular layout, and place every jar on the module path. Every module must then be explicitly named; a Maven coordinate is refused. |
--docker[=<image>] |
Run the launched process in a container while resolution and installation stay on the host. Without an image, a minimal hardened image is built once and reused; a named image runs as is. An empty value is the same as naming no image. |
--hash=<prefix> |
Verify the installed jars against a known digest before launching. At least 32 hex characters, with or without a leading SHA-256/. |
--help |
Print the usage screen and exit. |
--modular is covered under Choosing a target; --docker and --hash under
Isolation & verification.
Exit codes
| Code | When |
|---|---|
| the program's own | The launched program ran; jpx returns its exit code unchanged. |
0 |
--help. |
64 |
A usage error: no target, or an unknown option. The usage screen is printed to standard error. |
1 |
Resolution failed, a checksum did not match, or the target declares no entry point - reported with the message of the underlying exception. |
The API
Every flag has a counterpart in the API, which Using jpx from Java walks through:
| Call | What it does |
|---|---|
new Jpx(placement) |
The command line's wiring: installs under ~/.jenesis/jpx; PathPlacement.MODULE_PATH is --modular, PathPlacement.INFERRED the default. |
new Jpx(storage, repositories, resolvers, hashFunction, placement) |
The record itself: where installs land, where artifacts come from, how they are digested, and how a module name's jars are placed. |
jpx.install(target) |
Resolve and install <name>[@<version>][/<main-class>], returning an Installation. |
Jpx.Command.parse(target) / jpx.install(command) |
The same, with the target's three parts in hand. |
jpx.latestInstalled(name) |
The newest install of a name already on disk, without resolving anything. |
installation.folder() / .properties() |
The installation folder and its jpx.properties descriptor. |
installation.verify(prefix) |
The --hash check; returns the installation, throws on a mismatch. |
installation.launch(arguments) |
Launch the installation's own entry point and return the exit code. |
installation.launch(mainClass, arguments) |
The same with an entry point of your choice (null for the installation's own). |
installation.launch(mainClass, arguments, docker) |
The same inside a container; docker is a DockerizedJava, the API behind --docker. |
installation.javaArguments(mainClass, arguments, file) |
Everything after java, to start the process yourself. |