gradle-plugins/gradle-plugin-jlink/README.md

55 lines
2.1 KiB
Markdown

# JLink Gradle plugin
This project defines a Gradle plugin that enable the use of
[jmod](https://docs.oracle.com/en/java/javase/21/docs/specs/man/jmod.html),
[jdeps](https://docs.oracle.com/en/java/javase/21/docs/specs/man/jdeps.html),
[jlink](ttps://docs.oracle.com/en/java/javase/21/docs/specs/man/jlink.html) and
[jpackage](ttps://docs.oracle.com/en/java/javase/21/docs/specs/man/jpackage.html) and
in Gradle builds on Linux.
In general, the plugin enables developers to create Java Runtimes with jlink.
It uses the java toolchain to locate the `jlink` executable and creates
a java runtime for your module path based Java application. This
modularization allows small, secure and tailored application distributions.
## Plugin usage
This Gradle plugin integrates with the [Gradle Java Library plugin](https://docs.gradle.org/current/userguide/java_library_plugin.html)
to create distributions automatically using a modular runtime rather than a user provided JDK runtime.
For this, it runs `jmod`, `jdeps`, `jlink` or `jpackage` in order to check and very module
dependencies on the Gradle runtime dependencies in an automatic way with minimum parameters to specify
`jmod` downloads all runtime depency jars and transforms them into the jmod file specification,
so `jdeps`
`jlink` creates a directory with a modular runtime (which can be passed to container builds)
while `jpackage` relies on Linux packaging tools to create an `RPM` or `DEB` package for
distribution.
Here is a minimal example to build a
```groovy
plugins {
id 'org.xbib.gradle.plugin.jlink' version "8.8.0"
}
java {
toolchain {
languageVersion.set(JavaLanguageVersion.of(21))
}
}
jlink {
modules.set(List.of("org.example.app"))
launcher.set("app=org.example.app/org.example.app.Main")
stripDebug.set(true)
}
```
In addition, the plugin configures a `jmod` task to download the dependent artifacts on the
runtime class path and create jmod files for the `jlink` task. Also, a `jdeps` task is automatically
configured to show the dependent modules.
The plugin is currently only available under Linux.