Examples
Here are more examples of using the java formatter plugin.
For more details on these parameters, see the format goal.
Setting Source Files
By default, the plugin formats all java source files in the src/main/java and
src/test/java directories.
To format source files in other locations, use the directories parameter.
This example formats files in the java main source and generated sources directories:
<plugin>
<groupId>net.revelc.code.formatter</groupId>
<artifactId>formatter-maven-plugin</artifactId>
<version>2.29.0</version>
<configuration>
<directories>
<directory>${project.build.sourceDirectory}</directory>
<directory>${project.build.directory}/generated-sources</directory>
</directories>
</configuration>
</plugin>
For more control in specifying the java source files to format, use the
includes and excludes parameters. These parameters are fileset patterns
relative to all source directories, usually src/main/java and
src/test/java. This example only formats files in the include package,
except for test classes and those in the exclude “special” subpackage:
<plugin>
<groupId>net.revelc.code.formatter</groupId>
<artifactId>formatter-maven-plugin</artifactId>
<version>2.29.0</version>
<configuration>
<includes>
<include>com/relativitas/maven/plugins/formatter/</include>
</includes>
<excludes>
<exclude>com/relativitas/maven/plugins/formatter/special/</exclude>
<exclude>**/*Test.java</exclude>
</excludes>
</configuration>
</plugin>
Setting Compiler Version
To specify the compiler version to use in formatting, use the compilerSource,
compilerCompliance, and compilerTargetPlatform parameters. By default, the
plugin uses a version of 1.8 for all of these parameters. This example uses 1.9
as the compiler version during formatting:
<plugin>
<groupId>net.revelc.code.formatter</groupId>
<artifactId>formatter-maven-plugin</artifactId>
<version>2.29.0</version>
<configuration>
<compilerSource>1.9</compilerSource>
<compilerCompliance>1.9</compilerCompliance>
<compilerTargetPlatform>1.9</compilerTargetPlatform>
</configuration>
</plugin>
These 3 parameters can also be set using the maven compiler plugin properties for source and target.
<properties>
<maven.compiler.source>1.9</maven.compiler.source>
<maven.compiler.target>1.9</maven.compiler.target>
</properties>
System Independent Line Endings
To specify the line ending to use in formatting, use the lineEnding
parameter. By default, the plugin uses the line ending of the current system.
This parameter allows using the existing line ending of files or a consistent
line ending for all files, useful for large projects with developers using
different operating systems. This example specifies using the carriage-return
and line-feed of DOS/Windows for the line ending during formatting:
<plugin>
<groupId>net.revelc.code.formatter</groupId>
<artifactId>formatter-maven-plugin</artifactId>
<version>2.29.0</version>
<configuration>
<lineEnding>CRLF</lineEnding>
</configuration>
</plugin>
For all possible values, see the lineEnding description on the format goal.
Source File Encoding
To specify the encoding to use during formatting, use the encoding
parameter. By default, the plugin uses the project.build.sourceEncoding
property if specified in the pom. Otherwise, the file encoding of the current
system will be used. This example specifies using the UTF-8 encoding during
formatting using the parameter:
<plugin>
<groupId>net.revelc.code.formatter</groupId>
<artifactId>formatter-maven-plugin</artifactId>
<version>2.29.0</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
This example specifies also using the UTF-8 encoding during formatting but using the property:
<plugin>
<groupId>net.revelc.code.formatter</groupId>
<artifactId>formatter-maven-plugin</artifactId>
<version>2.29.0</version>
</plugin>
...
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
Custom Configuration File
By default, the plugin uses the Eclipse formatter settings and provides no
additional preferences other than the compiler version. To specify formatting
preferences for the Eclipse code formatter, use the configFile parameter.
This parameter points to a file or classpath resource location for an Eclipse
code formatter xml file. To provide additional classpath resources to the
plugin, add a dependency on a jar containing your formatter xml file.
A configFile can be created and exported in Eclipse as follows:
- In Eclipse, go to
Window>Preferences>Java>Code Style>Formatter - If you have a custom profile, select the profile and click on the
Editbutton- To create a custom profile, click the
Newbutton - Enter a name and select an existing profile to inherit settings from
- Click
Okand set the profile settings
- To create a custom profile, click the
- Click the
Exportbutton and save the file
This file should contain a profile of kind CodeFormatterProfile with
org.eclipse.jdt.core.formatter settings:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<profiles version="11">
<profile kind="CodeFormatterProfile" name="Custom Project Formatter" version="11">
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="1"/>
<setting id="org.eclipse.jdt.core.compiler.source" value="1.9"/>
...
</profile>
</profiles>
This example uses a configuration file named eclipse-formatter-config.xml for
formatting:
<plugin>
<groupId>net.revelc.code.formatter</groupId>
<artifactId>formatter-maven-plugin</artifactId>
<version>2.29.0</version>
<configuration>
<configFile>${project.basedir}/eclipse-formatter-config.xml</configFile>
</configuration>
</plugin>
The plugin overrides the compiler version in the configFile with the value of
1.8 by default, but will use the value of the maven.compiler.source
property for the compilerCompliance and compilerSource values, and the
value of the maven.compiler.target property for the compilerTargetPlatform
value, if those properties are set in your Maven environment.
These parameters are useful to avoid updating the configFile to keep the compiler version in sync with the pom. This example shows how to set these parameters directly in the plugin configuration, rather than rely on the default behavior:
<plugin>
<groupId>net.revelc.code.formatter</groupId>
<artifactId>formatter-maven-plugin</artifactId>
<version>2.29.0</version>
<configuration>
<configFile>${project.basedir}/eclipse-formatter-config.xml</configFile>
<compilerSource>1.9</compilerSource>
<compilerCompliance>1.9</compilerCompliance>
<compilerTargetPlatform>1.9</compilerTargetPlatform>
</configuration>
</plugin>
Basic Configuration Using External Resource
This section describes configuring the plugin for use with the formatter configuration file provided by another jar.
Assume that you are using an external build-tools jar, containing a formatter
file at eclipse/formatter.xml. Such a project could have been built using a
structure similar to the following:
com.example:build-tools
|-- pom.xml
`-- src
`-- main
`-- resources
`-- eclipse
`-- formatter.xml
You can then configure your project to use this formatter in this jar. A separate artifact containing the formatter resource works well with both single-module and multi-module projects.
The following configuration will bind the plugin to execute the format goal
in the default lifecycle phase of process-sources. Try it using mvn process-sources.
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>myproject</artifactId>
<version>1.0</version>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>net.revelc.code.formatter</groupId>
<artifactId>formatter-maven-plugin</artifactId>
<version>2.29.0</version>
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>build-tools</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>net.revelc.code.formatter</groupId>
<artifactId>formatter-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>format</goal>
</goals>
<configuration>
<configFile>eclipse/formatter.xml</configFile>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Multimodule Configuration
If you do not wish to use an externally provided resource jar containing your
formatter configuration, you can create a multi-module project, with one module
depending on a sibling build-tools project.
For example:
com.example:multiproject
|-- pom.xml
|-- build-tools
| `-- pom.xml
| `-- src
| `-- main
| `-- resources
| `-- eclipse
| `-- formatter.xml
|-- moduleA
| `-- pom.xml
|-- moduleB
| `-- pom.xml
In the multi-module parent POM
Provide some basic configuration, as desired in parent POM of the multi-module project for the formatter plugin.
The following configuration will bind the plugin to execute the format goal
in the default lifecycle phase of process-sources.
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>multiproject</artifactId>
<version>1.0</version>
<packaging>pom</packaging>
<name>Multiproject Parent</name>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>net.revelc.code.formatter</groupId>
<artifactId>formatter-maven-plugin</artifactId>
<version>2.29.0</version>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>net.revelc.code.formatter</groupId>
<artifactId>formatter-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>format</goal>
</goals>
<configuration>
<configFile>eclipse/formatter.xml</configFile>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<modules>
<module>build-tools</module>
<module>moduleA</module>
<module>moduleB</module>
</modules>
</project>
In the sibling modules which use the formatter
Configure the non-build-tools modules to include their sibling build-tools
module when they run the formatter (moduleA shown here, for example). Try it
using mvn process-sources.
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.example</groupId>
<artifactId>multiproject</artifactId>
<version>1.0</version>
</parent>
<artifactId>moduleA</artifactId>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>net.revelc.code.formatter</groupId>
<artifactId>formatter-maven-plugin</artifactId>
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>build-tools</artifactId>
<version>0.0.1</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</pluginManagement>
</project>
