Files
my-gradle-plugins/jpms-check/README.md

94 lines
3.7 KiB
Markdown

## Overview
This plugin will add a new task to your gradle projects, the `jpms-check` task, to help you to check how easily
whether you can start using [JPMS](http://openjdk.java.net/projects/jigsaw/) in your project and which one of your dependencies you will need to update or patch
to make them JPMS-friendly
### The *jpms-check* task
The `jpms-check` task will scan through all of your project dependencies and create a document where, for
each of them, it will be reported whether they contain a module descriptor (aka `module-info.class`) or
an `Automatic-Module-Name` entry in the manifest or if the jar is a
[Multi-Release JAR file](https://openjdk.java.net/jeps/238).
Note that artifacts that do not meet any of these requirements can still be used with JPMS,
but, using the standard module finder, the module's name will be inferred from the jar file name
(with [some tweaks](https://docs.oracle.com/javase/9/docs/api/java/lang/module/ModuleFinder.html#automatic-modules)
to try exclude the version number and the artifact classifier) which is not a very reliable option.
## Install the plugin
Checkout this project and in the root folder run
```bash
./gradlew publishToMavenLocal
```
to install it to your local machine's Maven repository.
## Add the plugin to your project
Add this plugin to you project simply adding it to your projects `build.gradle`
```groovy
plugins {
id "net.woggioni.plugins.jpms-check" version "0.1"
}
```
or to your `build.gradle.kts` if you prefer the Gradle Kotlin DSL
```kotlin
plugins {
id("net.woggioni.plugins.jpms-check") version "0.1"
}
```
You can also enable it globally on your machine just create a `~/.gradle/init.gradle` file with this content
```groovy
initscript {
repositories {
mavenLocal()
mavenCentral()
jcenter()
}
dependencies {
classpath "net.woggioni.plugins:jpms-check:0.1"
}
}
allprojects {
apply plugin: net.woggioni.plugins.jpms.check.JPMSCheckPlugin
}
```
this means that the plugin will be automatically enabled for all your Gradle projects,
note that it doesn't alter the build process in any way except for creating the
`jpms-check` task, so it is relatively safe to do so.
## Configure the plugin
The `jpms-check` will by default create a `jpms-report.html` file in the build directory of the Gradle project
where it is invoked. that is a fully self contained HTML document that can easily be opened wit ha web browser without
the need of a web server. The behaviour can be customized using some Gradle properties.
### Parameters description
- `jpms-check.outputFormat` will change the format of the generated report,
at the moment only `html` and `json` are supported (the json report contains the same data of the html report,
but instead of an HTML table, it generates an array of JSON objects containing the same data).
- `jpms-check.outputFile` will set the path and the name of the generated output file.
The default is a file in the build directory named `jpms-report.html` if the `html` format is chosen or
`jpms-report.json` otherwise.
- `jpms-check.recursive` if this property is set to `true` the plugin will recursively analyze all the subprojects
of the project where it is invoked and merge the results in a single report file (the default value of this property is
`false`)
- `jpms-check.configurationName` the name of the Gradle configuration whose dependencies will be analyzed,
it defaults to the `default` configuration.
#### Example usage
Call the `jpms-check` task to analyze all of the dependencies in the current project and all of its
subproject and create a JSON report with the result in `/tmp/report.json`
```bash
gradle -Pjpms-check.recursive=true -Pjpms-check.outputFormat=json -Pjpms-check.outputFile=/tmp/report.json jpms-check
```