Reference
The earlier chapters built up Jenesis one topic at a time. This one is the flat reference you come back to:
how to invoke the build, the target and selector grammar, every jenesis. configuration key with its
default, and the vocabulary of built-in steps a selector can name. Each entry links to the chapter that
explains it in full.
Invoking the build
Every project ships its build as source under build/. The canonical invocation
recompiles that engine and runs it:
java build/jenesis/Make.java [selectors…]
A package-manager install (see Getting started) adds a second form:
| Form | Invocation | Notes |
|---|---|---|
| Source | java build/ |
The canonical form; compiles the embedded engine on each run. |
| Installed | jenesis |
The command from SDKMAN, Homebrew or Scoop. It runs the installed engine against the current directory, not the sources under build/, so it also builds a project that embeds none. |
Settings may lead the arguments after the main class (java build/), and @<file> stands for the arguments a file holds - # comments
to the end of a line, quotes group, @@<text> is a literal @, and a file names no further file. See
Configuration.
-Djenesis.process.factory=tool|fork:
tool (the default) runs javac/jar in-process; fork runs
them as separate processes for stricter sandboxes. A GraalVM native image defaults to fork,
since it has no in-process JDK tools.
Targets
Positional arguments are selectors. With none, the build runs its default target, build, which
compiles and packages every module. Project. changes the default (there is no matching
property). The top-level targets the shipped layouts register:
| Target | What it runs |
|---|---|
build |
Compile, check, test, and package every module (the default). |
stage |
Materialise the release tree under target/ (see Publishing). |
export |
Publish the staged tree - into the local Maven repository (~/), the local module repository (~/), or both, depending on the layout. |
release |
Hand the staged tree to a configured release tool; a dry run unless told otherwise (see Publishing). |
plugin/ |
Run a plugin the project names under the hook point plugin, which runs only when named (see Extending the build). |
pin |
Rewrite every pom. / module-info. so the transitive closure is pinned at source (see Pinning & bills of materials). |
dependencies |
Print each module's resolved dependency graph with licences. |
ide |
Generate IntelliJ IDEA, VS Code, and Eclipse project metadata at the project root (see Building & running). |
help |
Print a one-screen orientation: how to start, the selectors, and how to make a step verbose. |
skill |
Print the briefing a coding agent works from, every page of it; skill/ prints the overview, which names the pages, and skill/ one page. |
metadata |
Refresh the metadata module outputs without building artifacts. |
configuration |
Print every setting with the value in force, one per line: jenesis.. Built to grep, and the tool's own property reference. |
properties |
Print every jenesis. setting in force for this run - from the command line, jenesis. or a profile alike - sorted by key. |
Selectors
A selector picks part of the build graph. Three shapes exist.
Module selectors start with +: the active layout rewrites +<name> into that module's path, so one
module builds without dragging in its siblings. A nested module is named by joining its path segments with
+, as in +api+client. + alone names the module whose descriptor sits at the project root - a root
pom. that is itself a module; an aggregator-only root or a pure modular project has no such module.
java build/jenesis/Make.java +mymodule # build just this module's subgraph
Path selectors are a slash-delimited path of module/ identities matched against the graph, with two
wildcards:
:matches exactly one segment.::matches any depth -::/matches everysign signstep anywhere in the tree.
Wildcards are lenient: a branch that fails to match is silently skipped. A literal path that does not
resolve throws Unknown selector: …. Once a step is matched, its predecessors run unconditionally, so its
inputs are always real folders.
| Invocation | What runs |
|---|---|
java build/ |
The default target, build: the whole graph. On a warm cache, every step is [SKIPPED]. |
java build/ |
Every test step at any depth, plus its predecessors. |
java build/ |
The same, anchored under the top-level build module. |
java build/ |
Only the named module's subgraph. |
java build/ |
Only the api/ module's pins. |
A +<module> selector narrows build and nothing else. pin, stage and export are entry points of
their own, so pin +mymodule runs the whole project's pin and that module's build rather than a pin
narrowed to one module. To pin a single module, name its step: the pin target holds one
module-<path> step per module, where <path> is the module's source folder URL-encoded, because a
selector splits on /.
Configuration keys
Every knob is a system property, passed with -D or set in a jenesis. file - see
Configuration for files, profiles, and precedence. Some also read an environment
variable as a fallback. Defaults apply when the key is unset.
The build prints this same catalogue for itself: configuration lists every key with the value in force and
where it came from, one line each, so configuration | grep cache answers what is available and what is set
in one step.
Project & layout
| Key | Default | Effect |
|---|---|---|
jenesis. |
auto |
The layout: auto, maven, modular, modular_. |
jenesis. |
target |
The per-build output folder. Safe to delete for a clean build. A project's own file names only a folder inside the project. |
jenesis. |
(unset) | Stamps this version onto every artifact the build produces. Unset, a module stays unversioned - no version in its descriptor and none in its path in the modular tree - and its generated POM, which cannot omit one, carries 0-SNAPSHOT. |
jenesis. |
(unset) | The source control tag recorded in the generated POM's <scm> and in the SBOM; empty records none, even over a declared scm. (see Publishing). |
jenesis. |
(unset) | The source revision, for Git the commit id, recorded in the SBOM; empty records none, even over a declared scm.. |
jenesis. |
(unset) | The Git tree id of the release, as git rev-parse HEAD^{tree} prints it, recorded in the SBOM as a SWHID; empty records none, even over a declared scm.. |
jenesis. |
(unset) | Comma-separated project-level metadata files for the POM and the SBOM. Unset reads project. at the project root when it exists; an empty value reads none. |
jenesis. |
false |
Also assemble a per-module sources jar. |
jenesis. |
false |
Also assemble a per-module javadoc jar. |
jenesis. |
false |
Archive that javadoc jar with nothing but an INTENTIONALLY_ file in it instead of rendering the documentation, for a repository such as Maven Central that requires the jar but not its content (see Publishing). |
jenesis. |
(unset) | Comma-separated <path>:<target> pairs of project files or folders placed among the resources of every module, as LICENSE:META-INF/ (see Supply-chain features). |
jenesis. |
false |
Keep the process alive and rebuild on every source change (see Building & running). |
The entry point (build/jenesis/Make.java )
Make is the entry point every command names. It carries no build logic and names no engine class, so the
Java launcher compiles one small file rather than the whole engine before the build starts. These settings are read from the command
line, from your own ~/ and from jenesis. at the project root, in that
order of precedence.
| Property | Default | Effect |
|---|---|---|
jenesis. |
. |
The directory scanned for module-info. / pom.. Command-line only. |
jenesis. |
(unset) | Comma-separated profile names to activate. |
jenesis. |
true |
Compile the build sources once and run the build from those classes, over a class loader of their own. One batch compile beats the launcher compiling class by class as it loads them, so this is faster even for a build that runs a single time. |
jenesis. |
. |
Where those classes land, relative to the project root. They go under . with the rest of the build's by-products, so nothing lands in the sources. A project's own file names only a folder inside the project. |
jenesis. |
false |
Hand the build to a reused JVM, which keeps a warm JIT between calls. --stop as the sole selector shuts it down. |
jenesis. |
false |
Start the build from an ahead-of-time cache of the engine, trained by the first build and read by every later one. Refused beside jenesis. and beside jenesis.. |
jenesis. |
(unset) | The JDK the build runs on, as 25, 25. or 25-temurin. Make. and Execute. start again on a matching installed JDK when the running one does not match (see Building & running). |
jenesis. |
@ |
Comma-separated folders searched for that JDK, absolute or under ~, with * for any one folder name; @ stands for the operating system's usual locations, and empty only checks the running JDK. Command line or ~/ only. |
jenesis. (JENESIS_) |
(unset) | A program run with the version as its last argument when no JDK on the search path matches, such as jenesis-jdk; a name is looked up on the PATH, a path is absolute or starts with ~. Command line, ~/ or the environment only, and an empty value runs none; the jenesis command sets the variable to its own jenesis-jdk, for the run it starts, where SDKMAN, mise or Scoop installed it and the variable is unset (see Building & running). |
What a daemon saves is compiling speed, not setup. A Jenesis build has no script to parse - the project is
described by pom. or module-info. and configured by properties files - so nothing parsed or
compiled is held between calls. What is held is a warm JIT, and a build spends its time inside javac, which
a JVM that has already compiled a few modules runs faster. The daemon therefore pays in proportion to how
much a build compiles: nothing on a build that compiles little, where the socket costs more than the warm
code saves, and about a third off a five-module project. Compiling the build sources once, which is on by
default, is what removes the large fixed cost; the daemon is the increment after that.
Only jenesis. properties travel with a call to a daemon, which clears and sets them again around every
build. Everything a running JVM cannot change is the daemon's identity instead - the build sources, the
environment, the JVM arguments, any other -D - and a call differing in one of them replaces the daemon
rather than being served by one configured for something else.
| Property | Default | Effect |
|---|---|---|
jenesis. |
10800 |
Seconds of idleness after which the daemon exits. |
jenesis. |
-Xmx2g |
JVM options for the daemon process itself, whitespace separated. Command line or ~/ only. |
An ahead-of-time cache answers the same cost without a process. It is a file of the engine's classes, already
loaded and linked, which a starting JVM maps instead of loading them again: nothing stays resident between
builds, there is no idle timeout, and the cache survives a reboot. The first build with jenesis.
trains it, which takes a build of a few seconds and some 20 MB on disk, and every later build starts from it.
It applies where the engine runs compiled, as the installed jenesis command runs it, which is where it saves
the most - a no-op build of a one-class project falls from 0.69 to 0.43 seconds. From the classes in
., a build packs them into a jar and starts a second JVM that can use the cache, which keeps
less of the saving. Source mode is out of its reach, because java build/ runs in a JVM that
started before the cache could be named, so there the setting changes nothing. The jenesis-make tool, which
runs inside another program's JVM, refuses it.
The engine and the JVM a cache was trained for are hashed into its name, as engine-<hex>., so a changed
engine or an upgraded JDK trains a new one and the one that no longer fits is removed. help, skill,
configuration and properties only print, so they neither train nor use a cache. The daemon keeps a warm JIT
the cache does not, so it stays ahead in a tight edit-build loop on a large project; where builds are frequent
and small, or a machine builds many projects now and then, the cache is the better trade.
| Property | Default | Effect |
|---|---|---|
jenesis. |
. |
Where the cache lives, relative to the project root; the hash is written before the extension. A project's own file names only a location inside the project. |
jenesis. |
(unset) | An ISO-8601 age, such as PT12H or P7D, after which the cache is trained again; unset keeps it until the engine or the JVM changes. |
| Property | Default | Effect |
|---|---|---|
jenesis. |
$HOME |
Base folder whose . subfolder holds the user-global jenesis.; empty string disables it. Command-line only. |
jenesis. |
(derived) | The settings the project's own files supplied, comma-separated and named without the jenesis. prefix. Make derives it, and no file may set it; it is how a repository or cache that a project's file named is never sent a credential. |
jenesis. |
build. |
Comma-separated project-wide configuration folders; @ splices the default back in, and @<name> splices what jenesis. or the environment variable <name> holds. |
jenesis. |
the configuration folders | Path-separated list of folders searched for pin-<name>. files. |
jenesis. |
. |
The project-local folder resolved artifacts are materialised into (hard-linked from ~/ where possible), in every layout. It also holds a copy of each repository's maven-metadata., so a RELEASE or range still resolves when the repository is unreachable. A project's own file names only a folder inside the project. |
Building & testing
| Key | Default | Effect |
|---|---|---|
jenesis. |
false |
Register no test steps, so no tests run. Naming the key with no value is true; = runs the tests. |
jenesis. |
(unset) | Comma-separated [<module>/ list; runs only matching tests. An entry naming a module's folder applies to that module's tests alone, and a test module no entry reaches runs none. |
jenesis. |
(unset) | Tests to run by tag, in a framework-neutral syntax that needs no quoting on a command line: comma-separated alternatives, a test running where it matches any of them, each a tag, several joined by + for the tests carrying all of them, and -<tag> for the tests not carrying it; translated for the test framework. A run remembers what it covered until the tests' inputs change, so a later selection runs only what no earlier run did (see Code quality & testing). |
jenesis. |
false |
Run tests in parallel where the framework supports it. |
jenesis. |
false |
Emit test reports under reports/: legacy JUnit XML and Open Test Reporting XML for junit-platform, TestNG's own report for testng. |
jenesis. |
(off) | Run only the tests a change can reach: true detects changes with MD5, the name of another message digest with that one, false runs every test. |
jenesis. |
false |
true runs the tests even when nothing changed and the recorded scope already covers the request. |
jenesis. |
1980-02-01T00:00:00Z |
The date and time recorded on every entry of the jars, jmods and zips the build produces; an ISO-8601 date-time with an offset between 1980-01-01T00:00:02Z and 2099-12-31T23:59:59Z. Empty turns the fixed time off, which is discouraged (see Building & running). Set explicitly, it is also the created label of a generated Dockerfile (see Packaging). |
jenesis. |
false |
Include test-variant artifacts when staging, and the modules tagged @jenesis. that they require. |
jenesis. |
true |
Emit a CycloneDX SBOM; set false to skip it. |
jenesis. |
(unset) | Licence the SBOM beside a native image records for the GraalVM that compiled it, as an SPDX identifier or a name; unset records none (see Supply-chain features). |
jenesis. |
META-INF/ |
Comma-separated jar entries taken as legal notices into a ., a linked or packaged image and beside a native image, from the module's jar and from each runtime dependency's jar; names match regardless of case and also with an extension, and an entry ending in / takes the folder below it (see Packaging). |
jenesis. |
true |
Run the licence and vulnerability checks; false skips both. |
jenesis. |
true |
Per-linter switch (checkstyle, pmd, detekt, ktlint, scalastyle, scalafmt, codenarc). |
jenesis. |
true |
Run SpotBugs when its filter file is present. |
jenesis. / . / . |
true |
Per-formatter switch. |
jenesis. |
false |
Rewrite sources in place instead of verifying. |
jenesis. |
true |
Run JaCoCo coverage when its file is present. |
jenesis. |
true |
Run the GraalVM tracing agent when its file is present. |
jenesis. |
true |
Record the test JVM with Java Flight Recorder when a jfr. is present. |
jenesis. |
true |
Run PIT mutation testing when its file is present. |
jenesis. |
true |
Run the japicmp API comparison when its file is present. |
jenesis. |
true |
Run Error Prone when an errorprone. is present; javac forks while it does, to grant the plugin the compiler internals it reads. |
jenesis. |
true |
Per-generator switch (xjc, protoc, avro, wsimport, openapi, antlr). |
jenesis. |
true |
Write META-INF/ files, and Enable-Native-Access for a module granting itself, from module-info when a classpath. is present - see A modular jar on the class path. |
The quality and packaging files these keys gate (checkstyle., packaging., and the like)
are covered in Code quality & testing, Generating
sources, Supply-chain features, and
Packaging.
Dependencies & pinning
| Key | Default | Effect |
|---|---|---|
jenesis. |
(lenient) | Pinning mode: strict, versions, or ignore. |
jenesis. |
none |
Signature verification after each download: none, declared, or strict. |
jenesis. |
ignore |
What to do when a module runs a jar whose Jenesis-Native-Access names a module it does not grant with @jenesis.: ignore, warn, or strict. |
jenesis. |
keep |
Whether the pin step keeps (keep) or flattens (flatten) BOM references. |
jenesis. |
(unset) | Write the whole project's pins to this properties file instead of rewriting the module declarations. A project's own file names only a folder inside the project. |
jenesis. |
true |
Whether pin writes SHA checksums alongside versions. |
jenesis. |
groups |
Which lines a refresh keeps although it did not write them: groups those of a group the run resolved nothing in, all every one (a project built in more than one layout), none none. |
jenesis. |
(unset) | Comma-separated pin files, relative to the project root, whose entries the file jenesis. names leaves out where the version and the checksum are the same. |
jenesis. |
(processor count) | How many modules' pins pin rewrites at once; 0 is unbounded. |
jenesis. |
(detected) | Add (=) or remove (=) a platform token used to select guarded pins. |
jenesis. |
(unset) | What a value @<key> or @<key>/ in a process-<command>. or environment-<command>. stands for; part of the input of every program it reaches (see Building & running). |
jenesis. |
true |
false leaves out the plugin <name> that jenesis. names (see Extending the build). |
jenesis. |
true |
false leaves out every plugin that jenesis. names, while pin still pins those of the whole project (see Extending the build). |
jenesis. |
SHA-256 |
Digest algorithm the pin step uses to checksum artifacts. |
jenesis. |
gpgv |
Binary forked to verify detached OpenPGP signatures. A name is looked up on the PATH; a value containing a separator is used as a path. Command line or ~/ only. |
jenesis. |
signing |
What an expired signing key means: ignored accepts it whenever it signed, signing accepts what it signed before it expired, current always rejects it. |
jenesis. |
(the configuration folders) | Path-separated locations searched for a local signature-<name>. key list. |
jenesis. |
(the trust root the tool carries) | The Sigstore trust root a bundle is checked against. Jenesis carries the published root of the public instance as source; naming another replaces it, for a private instance or a root that has rotated. Command line or ~/ only. |
jenesis. |
github. |
Comma-separated <host>= pairs for identity hosts whose OpenID Connect issuer is not the host itself. Both sides are written without a scheme. Command line or ~/ only. |
jenesis. |
maven |
Maven version strategy: maven, closest, latest, release, stable, fail, or managed. fail refuses a coordinate two dependencies require at different versions; managed refuses that and every version the project neither declares nor names in dependency management. |
jenesis. |
first |
What happens when two module descriptors record different versions: first, fail, ignore, or managed. managed additionally refuses a module reached through another module's requires that carries no pin. |
Repositories
| Key (env fallback) | Default | Effect |
|---|---|---|
jenesis. (MAVEN_) |
Maven Central | Upstream Maven repository URL(s); supports filters and references. A project's own file may name them, and jenesis. is then not sent. |
jenesis. (MAVEN_) |
~/ |
Local Maven repository for reads and export. Command line or ~/ only. |
jenesis. (MAVEN_) |
(unset) | Authorization header sent to the Maven upstream. Command line or ~/ only. It travels only to a jenesis. named in the environment, on the command line or there, never to the built-in public repository. |
jenesis. |
true |
Carry the POM and a pom. in the jar under META-INF/, as Maven does, where the layout publishes to Maven (see Publishing). |
jenesis. |
2 |
How many leading dot-separated segments of a module name form its Maven groupId when a module is published or resolved by the coordinate convention; a name with fewer becomes the groupId whole. A maven:<segments>:<uri> entry of jenesis. sets it for that remote alone. |
jenesis. (JENESIS_) |
https:/ |
The Jenesis Module Index URL(s) module names resolve through; same list/filter/@ grammar. An entry may name how it is read: maven:[<segments>:]<uri> reads a Maven repository by the publishing convention, and mapped:<uri or @>:<list>[;<list>. reads the modules that . lists, each a URI or an absolute path, map to <groupId>/, from the Maven repository at that URI or, for @, from the one jenesis. configures. A project's own file may name them, and jenesis. is then not sent. |
jenesis. (JENESIS_) |
~/ |
The local module repository, read first and written by export. Command line or ~/ only. |
jenesis. |
service |
Who resolves a module name: service asks the index at jenesis., git reads its published data itself and fetches from jenesis.. |
jenesis. (JENESIS_) |
data/ in jenesis/ |
Where git reads that data from - a fork or mirror of the index's per-module files. |
jenesis. |
(unset) | Whether a module asked for without a version may resolve to a pre-release. Unset states no preference: the newest release is served, and a module that has only pre-releases resolves to nothing. |
jenesis. |
(unset) | Whether a version the index has not recorded may be resolved from the module's newest coordinate. Unset states no preference, and the version is guessed. |
jenesis. (OPENPGP_) |
keyserver., keys. |
HKP key server roots a declared fingerprint resolves through; same list/@ grammar, asked in order. A project's own file may name them. |
jenesis. (OPENPGP_) |
. |
Where fetched keys are held, one file per fingerprint; an empty openpgp. makes this the only source. A project's own file names only a folder inside the project. |
jenesis. (JENESIS_) |
(unset) | Authorization header sent to the module index. Command line or ~/ only. It travels only to a jenesis. named in the environment, on the command line or there, never to the built-in public repository, and only to the first of several. |
jenesis. |
false |
Permit plaintext (http:/) repositories, and over https accept a certificate that does not verify, such as a self-signed one. Command line or ~/ only. |
jenesis. |
2 |
Retries for a transient fetch failure (0 disables). |
jenesis. |
125 |
Initial retry wait in milliseconds, doubling each attempt. |
jenesis. |
10000 |
Connect timeout for a repository fetch, in milliseconds. |
jenesis. |
30000 |
Read timeout for a repository fetch, in milliseconds. |
jenesis. |
false |
Before the module and Maven repositories, read https:/ of the domain a module or Maven group is named after - see Discovery. |
jenesis. |
false |
Download nothing. Modules, artifacts, checksums and keys come from ., the local Maven repository or a local module folder, and Maven metadata an earlier resolution stored answers a version range at the versions it named then. A fetch that would need the network fails the build with its URL named. The remote build cache is skipped, and a vulnerability lookup or a release fails the build. |
Caching
| Key (env fallback) | Default | Effect |
|---|---|---|
jenesis. |
(none) | Shared build cache: a file:/ or http(s):/ URI (see Build performance & isolation; Jenesis Repository is a reference cache server). Command line or ~/ only. |
jenesis. |
(off) | Project-local on-disk build cache (a path; empty enables .). A project's own file names only a folder inside the project. |
jenesis. (JENESIS_) |
(unset) | Project header sent to an HTTP cache. |
jenesis. (JENESIS_) |
(unset) | Auth key sent to an HTTP cache. Command line or ~/ only. |
jenesis. |
PT1S |
HTTP cache connect timeout, as an ISO-8601 duration. |
jenesis. |
PT10S |
HTTP cache read timeout, as an ISO-8601 duration. |
jenesis. |
false |
Permit the cache key over plaintext http:/, and over https accept a certificate that does not verify, such as a self-signed one. Command line or ~/ only. |
Running & containers
| Key | Default | Effect |
|---|---|---|
jenesis. |
(prompt) | The module to run with Execute.. |
jenesis. |
(inferred) | The main class to run. |
jenesis. |
false |
Build inside a throwaway container. Command line or ~/ only. |
jenesis. |
(hardened) | Image for the build container. Command line or ~/ only. |
jenesis. |
(none) | <host>[:<container>],… read-only bind mounts. Command line or ~/ only. |
jenesis. |
(none) | Writable bind mounts. Command line or ~/ only. |
jenesis. |
(none) | <name>[= environment forwarded into the container. Command line or ~/ only. |
jenesis. |
false |
Run the launched program in a container. Command line or ~/ only. |
jenesis. / . / . |
(as above) | The run-side equivalents. Command line or ~/ only. |
Releasing
Read by the release target - see Publishing.
| Key | Default | Effect |
|---|---|---|
jenesis. (JENESIS_) |
(unset) | The Jenesis module repository release puts each staged module into, with one put of its jar at module/, so every module needs a version: the https: address of a jenesis repository of a Jenesis Repository, the one jenesis. names; a java repository takes Maven publishes only and refuses the put. Unset, release puts nothing there. Its environment variable is not the one a build resolves through. |
jenesis. (JENESIS_) |
(unset) | Authorization header sent to that repository, as given. Command line, ~/ or the environment only. It travels only to a jenesis. named in the environment, on the command line or there, never to one a project's own file named. Its environment variable is not the one sent to the resolving repositories. |
jenesis. |
(discovered) | The release-tool configuration file; must exist when named. |
jenesis. |
true |
Perform every local phase and skip every remote one; false publishes. |
jenesis. |
jreleaser |
The executable to locate. Command line or ~/ only. |
jenesis. |
full-release |
The subcommand to run. |
Read by the signing step - see Publishing. Naming any of them says the project signs its jar, and the build then stops rather than producing an unsigned one if the key store, the alias or the password location is missing.
| Key | Default | Effect |
|---|---|---|
jenesis. |
(unset) | The key store jarsigner signs the produced jar with, in place of the unsigned one. Command line or ~/ only. |
jenesis. |
(unset) | The name of the key within that store. Command line or ~/ only. |
jenesis. |
(unset) | Where that store's password is read from: env <variable> or file <path>, never the password itself. Command line or ~/ only. |
jenesis. |
(unset) | The same, for a key that carries a password of its own. Command line or ~/ only. |
jenesis. |
(the JDK's own) | The store's type as jarsigner names it, normally PKCS12. Command line or ~/ only. |
jenesis. |
(unset) | A timestamp authority to stamp the signature with, so it outlives the certificate. Command line or ~/ only. |
jenesis. |
(unset) | Further jarsigner arguments, whitespace separated. Command line or ~/ only. |
Output & the execution engine
| Key | Default | Effect |
|---|---|---|
jenesis. |
ansi |
ansi colours what the build prints with ANSI escape sequences; none prints plain text. |
jenesis. |
true |
Per-step [STARTED]/[SKIPPED]/… lines; false runs silently. |
jenesis. |
true |
Print the Docker image a step is wrapped in. |
jenesis. |
false |
Print each external tool's command line. |
jenesis. |
false |
Stream every external tool's output; jenesis. targets one tool. |
jenesis. |
false |
Stream the test JVM's command and output. |
jenesis. |
false |
Print a [FETCHED] line per downloaded artifact. |
jenesis. |
false |
Print [LOADED]/[STORED] lines for the build cache, local and shared. |
jenesis. |
false |
Print a [VERIFIED] line per checked dependency with the key or the identity that signed it, [EXPIRED] with both dates where the key has since expired, and [UNDECLARED]/[UNSIGNED] for the ones no declaration covers. |
jenesis. |
false |
Append input/output checksums under each [EXECUTED] line. |
jenesis. |
false |
Print a [KEPT] line per pin a refresh kept although no closure resolved it. |
jenesis. |
false |
Print a [DIVERGED] line per coordinate the project pins at more than one version; divergence. is written either way. |
jenesis. |
false |
Print an [ALIAS] line per @jenesis. whose target already declares that module name. |
jenesis. |
false |
Stream the release tool's output. |
jenesis. |
full |
The dependencies tree rendering: full or compact. |
jenesis. |
true |
Print one dependencies tree per module whose every node names the scopes it is resolved in; false prints one tree per module and scope. |
jenesis. |
false |
List the project's own modules among the resolved dependencies of the dependencies trees and count them in the licence and module summary. |
jenesis. |
true |
Include the test modules in the dependencies trees and their licence summary. |
jenesis. |
MD5 |
Digest for the per-file content and per-step config hashes. |
jenesis. |
PT0S |
ISO-8601 per-step timeout; PT0S disables it. |
jenesis. |
false |
Delete target/ first, forcing a full rebuild. |
jenesis. |
false |
Let independent step failures aggregate into one report instead of failing at the first. |
jenesis. |
true |
Write each step's outcome of the latest build to target/, one JSON object per line (see Building & running). |
jenesis. |
0 |
The most build steps that run at once across the whole build; 0 means no limit. |
jenesis. |
tool |
How JDK tool steps launch: tool (in-process) or fork. |
jenesis. |
0 |
The most JDK tool runs that happen at once across the whole build; 0 means no limit. |
JAVA_ (env) |
(from java.) |
Locates the JDK binaries when the runtime is not a JDK. |
Built-in steps
A selector names a step by its identity. The build is a tree of these; the identities below are the ones you address on the command line. Each produces one output folder from its inputs, and its full behaviour is in the linked chapter.
Per module
| Step | Produces |
|---|---|
binary |
The Java toolchain for one module; its compiled, classes, validate, and artifacts steps sit beneath it. |
compiled |
Compiled classes from sources and the compile class path (javac, or a language compiler). |
classes |
The version-stamped classes exposed to downstream consumers. |
validate |
Byte-code analysis (SpotBugs, as validate/). |
classpath |
The META-INF/ files and manifest attribute that let a modular jar run on the class path, when a classpath. is present (as classpath/). |
artifacts |
The packaged jar. |
check |
Static-analysis findings (Checkstyle, PMD, detekt, …). |
format |
Formatting verification, or an in-place rewrite. |
dependencies |
The resolved, fetched dependency closure. |
test (executed) |
The test run and its reports. |
observed |
The coverage- or trace-wrapped test run. |
mutate |
The mutation-testing report (PIT). |
compliance |
The licence and vulnerability check results. |
sbom |
The CycloneDX bill of materials. |
documentation |
The javadoc (or Dokka) output and its jar. |
pom |
The emitted pom.. |
Packaging
Wired by keys in packaging. - see Packaging.
| Step | Produces |
|---|---|
legal |
The legal notices of the module's jar and its runtime dependencies, for its . and a native image. |
jmod |
A . link-time module. |
jlink |
A custom runtime image. |
jpackage |
A native installer or self-contained app image; with several types, every package jpackage lists. |
jpackage-<type> |
One type's package, where several types are built or the container image needs one jpackage does not list. |
bundle |
A self-contained bundle. of the application. |
launcher |
A single executable launcher jar (see Jenesis Launcher). |
docker |
A container build context - a Dockerfile and the jars it copies, or the jpackage package docker. names. |
native-image |
A GraalVM native executable. |
modules |
The dependency closure rewritten into explicit named modules (from modules.). |
Top level
The build, stage, export, release, and pin modules are the top-level targets in the table above;
each layout wires the maven and/or modular staging and export sub-steps under them. When a project names
plugins of the whole project, build also holds preprocess/, which runs before any module is built,
and postprocess/ and postprocess/, which run over every module after it is built,
while stage holds transform/ and inspect/ - with the stock staging then in staged/ and
each stage/ merging it with what the transforms of stage added - export and release hold
custom/ beside their own steps, and the top-level plugin holds a plugin of the hook point plugin as
plugin/, run only when named; stage/ holds what the transforms placed in the project (see Extending the
build).
Source declarations
Everything a module declares about its build is a Javadoc tag on module-info. - or, in the maven
layout, the POM equivalent named beside it. Tags are read from the module's documentation
comment in either form - the traditional / and the Markdown / of
JEP 467 - and pin writes back in whichever form the comment
already uses. This is the whole vocabulary:
| Tag | Declares | Chapter |
|---|---|---|
@jenesis. |
The Java release to compile against (maven. in a POM); the running JDK's release when absent. <N>-preview also enables the preview features of that release, to compile and to run (maven. in a POM). |
Building & running |
@jenesis. |
The module's entry point (<mainClass> in a POM). |
Building & running |
@jenesis. |
Marks this module as the test module of another, or as test infrastructure that declares no tests of its own (abstract). |
Building & running |
@jenesis. |
An annotation processor, or a compiler plugin for a named compiler. | Other JVM languages |
@jenesis. |
A library to attach as a Java agent (<!--jenesis. in a POM). |
Building & running |
@jenesis. |
Native access for the modules named, this one only when it names itself; a module in a layer is granted with @jenesis. instead (<!--jenesis. in a POM). |
Building & running |
@jenesis. |
Transitives to prune from a requirement (<exclusions> in a POM). |
Dependencies |
@jenesis. |
A module name for an artifact that has none. | Dependencies |
@jenesis. |
A module to replace with the modules that already carry its packages. | Dependencies |
@jenesis. |
The one module this module shares with the layer <name>. |
Dependencies |
@jenesis. |
A root the layer <name> isolates, with its whole closure: a module name or a <repository>/. Repeat for more roots. |
Dependencies |
@jenesis. |
Passes this module's native access on to a module of the layer <name>; this module then needs native access itself. |
Building & running |
@jenesis. |
An exact version and checksum (<!--jenesis. / <dependencyManagement> in a POM); a trailing (<token>,…) guard applies the line only on a matching platform. Parentheses, not brackets: a bracketed word is a link in a Markdown documentation comment. |
Pinning & bills of materials |
@jenesis. |
A bill of materials to import. | Pinning & bills of materials |
@jenesis. |
The OpenPGP key that signs these coordinates' artifacts; a Maven token may end in / to cover a whole groupId, and a lone [<group>/ reads the keys from a local list. |
Securing the supply chain |
@jenesis. |
The identity that signs these coordinates, for a repository that publishes a . beside the artifact. The path is a prefix of the identity a certificate names, and the host also names the issuer that must have authenticated it. |
Securing the supply chain |