Some brief examples on how to use this plugin.
Java 17 is the first LTS release to enforce strong encapsulation. For ktlint to work we need to add --add-opens java.base/java.lang=ALL-UNNAMED to the JVM arguments.
We recommend that you add a .mvn/jvm.config file (relative to the top level project directory) to all of your projects using this plugin. The file should have the following contents:
--add-opens java.base/java.lang=ALL-UNNAMED
We also recommend adding this to all of your projects using this plugin and building with Java 11, as it'll suppress an illegal-access warning during the build.
For other options see: https://maven.apache.org/configure.html
Probably the most common use case is to want to both format and check your code; add the following plugin configuration to your POM.
<build>
<plugins>
...
<plugin>
<groupId>com.github.gantsign.maven</groupId>
<artifactId>ktlint-maven-plugin</artifactId>
<version>3.5.0</version>
<executions>
<execution>
<id>format-and-check</id>
<goals>
<goal>format</goal>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
...
</plugins>
</build>If you just want ktlint to automatically fix what it can, add the following plugin configuration to your POM.
<build>
<plugins>
...
<plugin>
<groupId>com.github.gantsign.maven</groupId>
<artifactId>ktlint-maven-plugin</artifactId>
<version>3.5.0</version>
<executions>
<execution>
<id>format</id>
<goals>
<goal>format</goal>
</goals>
</execution>
</executions>
</plugin>
...
</plugins>
</build>To run this from the command line (without adding the plugin to your POM) you can run the following from your console:
mvn com.github.gantsign.maven:ktlint-maven-plugin:3.5.0:format
If you just want to drill good habits into your developers, add the following plugin configuration to your POM.
<build>
<plugins>
...
<plugin>
<groupId>com.github.gantsign.maven</groupId>
<artifactId>ktlint-maven-plugin</artifactId>
<version>3.5.0</version>
<executions>
<execution>
<id>check</id>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
...
</plugins>
</build>To run this from the command line (without adding the plugin to your POM) you can run the following from your console:
mvn com.github.gantsign.maven:ktlint-maven-plugin:3.5.0:check
To generate the ktlint report as part of the project reports, add the ktlint plugin in the <reporting> section of your POM.
<build>
<pluginManagement>
<plugins>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<!-- ktlint-maven plugin requires maven-site-plugin >= 3.7.0 to work -->
<version>3.7.1</version>
</plugin>
...
</plugins>
</pluginManagement>
</build>
<reporting>
<plugins>
...
<plugin>
<groupId>com.github.gantsign.maven</groupId>
<artifactId>ktlint-maven-plugin</artifactId>
<version>3.5.0</version>
</plugin>
...
</plugins>
</reporting>As well as Maven project reports that are part of the Maven site (see above) this plugin also supports ktlint reporters:
<build>
<plugins>
...
<plugin>
<groupId>com.github.gantsign.maven</groupId>
<artifactId>ktlint-maven-plugin</artifactId>
<version>3.5.0</version>
<executions>
<execution>
<id>reporter</id>
<goals>
<goal>check</goal>
</goals>
<configuration>
<failOnViolation>false</failOnViolation>
<reporters>
<reporter>
<name>plain</name>
<output>${project.build.directory}/ktlint.txt</output>
<properties>
<property>
<name>group_by_file</name>
<value>true</value>
</property>
</properties>
</reporter>
</reporters>
</configuration>
</execution>
</executions>
</plugin>
...
</plugins>
</build>The built in reporters are plain, json and checkstyle. You can also provide a customer reporter (see https://github.com/pinterest/ktlint for details); to use a custom reporter it needs to be added as a Maven dependency to the Maven plugin e.g.:
<build>
<plugins>
...
<plugin>
<groupId>com.github.gantsign.maven</groupId>
<artifactId>ktlint-maven-plugin</artifactId>
<version>3.5.0</version>
<executions>
<execution>
<id>check</id>
<goals>
<goal>check</goal>
</goals>
<configuration>
<failOnViolation>false</failOnViolation>
<reporters>
<reporter>
<name>my-custom-reporter</name>
<output>${project.build.directory}/ktlint.rpt</output>
</reporter>
</reporters>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>my-custom-reporter</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
</plugin>
...
</plugins>
</build>