Checkstyle Compatibility Matrix

Tired of the many incompatibilities of the Checkstyle ecosystem? Here is a consolidated matrix of Checkstyle-related product versions that helps in selecting a working Checkstyle setup for your enterprise. Explanations and notes for each column may be found below, or by clicking on the column letter.

Checkstyle Addons is compatible with nearly all versions of Checkstyle (at least all that you will reasonably use). So this matrix has nothing to do directly with Checkstyle Addons, but is provided as a service to you.

Last major update: 2017-01-31

Checkstyle Version
Release Date
Check behavior compatible?
Public API compatible?
Java Version used to run Checkstyle
Java Version of the code being analyzed
Checkstyle-
IDEA Plugin for IntelliJ
Java Version used to run IntelliJ IDEA
Eclipse-CS
Maven Checkstyle Plugin Default
Gradle Version required
Gradle Checkstyle Plugin Default
Checkstyle Addons
SevNTU Checkstyle
SonarQube Checkstyle Plugin
SonarQube platform
SonarQube Java Plugin required
A B C D E F G H I J K L M N O P Q
7.5 2017-01-29 --   ≥ 8     ≤ 8   ≥ 5.1.0 ≥ 8 (upcoming)  ≥ 2.7  ≥ 2.0.0 1.19.0 - 1.23.0 3.5 ≥ 5.6.4 ≥ 2.1
7.4 2016-12-31 --   ≥ 8     ≤ 8   4.35.0, ≥ 5.0.0 ≥ 8 --  ≥ 2.7  ≥ 2.0.0 1.19.0 - 1.23.0 3.4 ≥ 5.6.4 ≥ 2.1
7.3 2016-11-25 --   ≥ 8     ≤ 8   4.34.0, ≥ 5.0.0 ≥ 8 7.3.0  ≥ 2.7  ≥ 2.0.0 1.19.0 - 1.23.0 3.3 ≥ 4.5.2 ≥ 2.1
7.2 2016-10-30 --   ≥ 8     ≤ 8   4.33.0, ≥ 5.0.0 ≥ 8 7.2.0  ≥ 2.7  ≥ 2.0.0 1.19.0 - 1.23.0 3.2 ≥ 4.5.2 ≥ 2.1
7.1.2 2016-09-30 --   ≥ 8     ≤ 8   ≥ 5.0.0 ≥ 8 --  ≥ 2.7  ≥ 2.0.0 1.19.0 - 1.22.0 3.1.2 ≥ 4.5.2 ≥ 2.1
7.1.1 2016-09-05 --   ≥ 8     ≤ 8   4.32.x, ≥ 5.0.0 ≥ 8 --  ≥ 2.7  ≥ 2.0.0 1.19.0 - 1.22.0 3.1.1 ≥ 4.5.2 ≥ 2.1
7.1 2016-07-31   ≥ 8     ≤ 8   4.31.0, ≥ 5.0.0 ≥ 8 --  ≥ 2.7  ≥ 2.0.0 1.19.0 - 1.22.0 3.1 ≥ 4.5.2 ≥ 2.1
7.0 2016-06-26 -- --   ≥ 8     ≤ 8   4.30.x ≥ 8 --  ≥ 2.7  ≥ 2.0.0 1.19.0 - 1.22.0 -- -- --
6.19 2016-05-29   ≥ 7     ≤ 8   4.29.x, ≥ 5.0.0 ≥ 8 6.19.x  ≥ 2.7  ≥ 2.0.0 1.19.0 - 1.22.0 -- -- --
6.18 2016-05-01   ≥ 7     ≤ 8   4.28.x ≥ 8 --  ≥ 2.7  ≥ 2.0.0 1.19.0 - 1.22.0 -- -- --
6.17 2016-03-25 --   ≥ 7     ≤ 8   4.27.x ≥ 8 --  ≥ 2.7  ≥ 2.0.0 1.19.0 - 1.22.0 -- -- --
6.16.1 2016-03-03 --   ≥ 7     ≤ 8   ≥ 5.0.0 ≥ 8 6.16.0  ≥ 2.7  ≥ 2.0.0 1.19.0 - 1.22.0 -- -- --
6.16 2016-02-28 --   ≥ 7     ≤ 8   -- -- --  ≥ 2.7  -- -- -- -- --
6.15 2016-01-31   ≥ 7     ≤ 8   4.25.0 - 4.26.0, ≥ 5.0.0 ≥ 8 --  ≥ 2.7  ≥ 2.0.0 1.19.0 - 1.20.0 -- -- --
6.14.1 2015-12-30   ≥ 7     ≤ 8   4.23.0 - 4.24.0, ≥ 5.0.0 ≥ 8 6.14.0  ≥ 2.7  ≥ 1.3.0 1.19.0 - 1.20.0 -- -- --
6.14 2015-12-28 -- --   ≥ 7     ≤ 8   -- -- --  ≥ 2.7  ≥ 1.3.0 -- -- -- --
6.13 2015-11-30 --   ≥ 7     ≤ 8   4.22.x, ≥ 5.0.0 ≥ 8 --  ≥ 2.7  ≥ 1.3.0 1.15.0 - 1.18.0 -- -- --
6.12.1 2015-11-05 --   ≥ 7     ≤ 8   4.21.x, ≥ 5.0.0 ≥ 8 --  ≥ 2.7  ≥ 1.3.0 1.15.0 - 1.18.0 2.4 ≥ 4.5.2 ≥ 2.1
6.12 2015-11-01 -- --   ≥ 7     ≤ 8   ≥ 5.0.0 ≥ 8 --  ≥ 2.7  ≥ 1.3.0 1.15.0 - 1.18.0 -- -- --
6.11.2 2015-10-05   ≥ 7     ≤ 8   4.20.x, ≥ 5.0.0 ≥ 8 6.11.x 2.17  ≥ 2.7  ≥ 1.3.0 1.15.0 - 1.18.0 -- -- --
6.11.1 2015-10-02   ≥ 7     ≤ 8   -- -- --  ≥ 2.7  ≥ 1.3.0 1.15.0 - 1.18.0 -- -- --
6.11 2015-09-27   ≥ 7     ≤ 8   -- -- --  ≥ 2.7  ≥ 1.3.0 1.15.0 - 1.18.0 -- -- --
6.10.1 2015-09-01   ≥ 7     ≤ 8   4.19.x, ≥ 5.0.0 ≥ 8 --  ≥ 2.7  ≥ 1.3.0 -- -- -- --
6.10 2015-09-01   ≥ 7     ≤ 8   -- -- -- -- ≥ 2.7 ≥ 1.3.0 -- -- -- --
6.9 2015-08-07   ≥ 7     ≤ 8   4.18.x, ≥ 5.0.0   ≥ 8   6.9.0 ≥ 2.7    ✓    ≥ 1.3.0 -- -- -- --
6.8.2 2015-08-05   ≥ 7     ≤ 8   ≥ 5.0.0 ≥ 8 -- ≥ 2.7 ≥ 1.3.0 1.13.6 - 1.14.0 -- -- --
6.8.1 2015-07-01   ≥ 7     ≤ 8   4.17.x   ≥ 8   6.8.0 ≥ 2.7 ≥ 1.3.0 1.13.6 - 1.14.0 -- -- --
6.8 2015-06-29 ≥ 7 ≤ 8 -- -- -- ≥ 2.7 ≥ 1.3.0 1.13.6 - 1.14.0 -- -- --
6.7 2015-06-01 ≥ 7 ≤ 8 4.16.0, ≥ 5.0.0 ≥ 8 -- 1.0 - 2.6 ≥ 1.3.0 1.13.6 - 1.14.0 -- -- --
6.6 2015-04-27 ≥ 7 ≤ 8 4.15.0, ≥ 5.0.0 ≥ 8 -- 1.0 - 2.6 ≥ 1.3.0 1.13.0 - 1.13.5 -- -- --
6.5 2015-03-28 ≥ 7 ≤ 8 4.14.x, ≥ 5.0.0 ≥ 8 6.5.x 1.0 - 2.6 ≥ 1.3.0 1.13.0 - 1.13.5 -- -- --
6.4.1 2015-03-04 ≥ 7 ≤ 8 ≥ 5.0.0 ≥ 8 6.4.x 1.0 - 2.6 ≥ 1.0.0 -- 2.3 ≥ 4.5.2 ≥ 2.1
6.4 2015-02-28 ≥ 7 ≤ 8 -- -- -- 1.0 - 2.6 ≥ 1.3.0 -- -- -- --
6.3 2015-02-02 ≥ 7 ≤ 8 -- -- -- 1.0 - 2.6 ≥ 1.3.0 -- -- -- --
6.2 2014-12-28 ≥ 7 ≤ 8 ≥ 5.0.0 ≥ 8 6.2.x 2.16 1.0 - 2.6 ≥ 1.3.0 -- -- -- --
6.1.1 2014-11-27 ≥ 6 ≤ 8 4.11.0 - 4.13.2 ≥ 6 6.1.1 2.15 1.0 - 2.6 ≥ 1.3.1 (java6) -- -- -- --
6.1 2014-11-14 ≥ 6 ≤ 8 4.10.0 ≥ 6 6.1.0 1.0 - 2.6 ≥ 1.3.1 (java6) -- 2.2 4.2 - 4.4 ≥ 2.1
6.0 2014-10-23 ≥ 6 ≤ 8 4.9.0 ≥ 6 -- 1.0 - 2.6 ≥ 1.3.1 (java6) -- -- -- --
5.9 2014-10-17 ≥ 5 ≤ 8 4.8.0 ≥ 6 5.9.x 1.0 - 2.6 2.4 - 3.3 -- -- -- -- --
5.8 2014-10-05 ≥ 5 ≤ 7 4.7.0 ≥ 6 5.8.x 2.14 1.0 - 2.6 -- 1.8.0 - 1.12.0 -- -- --
5.7 2014-02-03 ≥ 5 ≤ 7 4.5.0 - 4.6.2 ≥ 6 5.7.x 2.12 - 2.13 1.0 - 2.6 2.0 - 2.3 -- 1.8.0 - 1.12.0 -- -- --
5.6 2012-09-18 ≥ 5 ≤ 7 3.9.2-4.4.3
3.9 - 3.9.1
≥ 6
≥ 5
5.6.x 2.10 - 2.11 1.0 - 2.6 1.4 - 1.12 -- 1.6.0 - 1.12.0 2.1.1
2.0
4.2 - 4.4
3.6-4.1.2
≥ 2.1
5.5 2011-11-05 ≥ 5 ≤ 7 3.8.x ≥ 5 5.5.x 2.9.x 1.0 - 2.6 1.0 - 1.3 -- 1.5.0 - 1.12.0 -- -- --
5.4 2011-07-14 ≥ 5 ≤ 6 3.5 ≥ 5 5.4.x 2.7 - 2.8 1.0 - 2.6 -- 1.8.0 - 1.11.0 -- -- --
5.3 2010-10-19 ≥ 5 ≤ 6 3.3.2 ≥ 5 5.3.x 1.0 - 2.6 ✓ (0.9) -- 1.8.0 - 1.11.0 -- -- --
5.2 2010-09-25 ≥ 5 ≤ 6 -- -- 5.2.x 1.0 - 2.6 -- 1.8.0 - 1.11.0 -- -- --
5.1 2010-02-16 ≥ 5 ≤ 6 3.1.2 ≥ 5 5.1.x (✓) (1.0 - 2.6) (✓) -- (upcoming) -- -- --
5.0 2009-04-18 ≥ 5 ≤ 6 3.0.13 ≥ 5 5.0.x (2.4 - 2.6) (1.0 - 2.6) (0.8) -- (upcoming) -- -- --
A C D E F G H I J K L M N O P Q

Detail Notes

The following sections give information on how the data for each column was obtained.

A. Checkstyle Version

This column simply contains all Checkstyle versions that were released, starting from version 5.0. Version 5.0 was the first Checkstyle version to require Java 5. Since this document was started in 2015, older Java levels seem to be of historical rather than practical interest.
The versions shown in parentheses are considered “broken” because of serious compatibility problems (Checkstyle issues #505 and #2997). These issues mean that custom checks that were not explicitly built against that version of Checkstyle will likely fail to work. (Checkstyle Addons works for 6.0, 6.1, and 6.1.1 because it’s java6 variant is explicitly built against 6.1.1 and the error is consistent across these three versions.)

C. Check behavior backward compatible?

A check mark in this column indicates that a version upgrade of Checkstyle from the previous version:

Only the differences to the immediately preceding version are considered. This information was primarily gathered from the release notes, but additional analysis of the commit history on GitHub has turned up further breaking changes:

Checkstyle
– Breaking Change
6.12.1
– default value of property processJavadoc changed in UnusedImports check (commit #afbb944, mentioned in release notes as "bug fix")
6.12
package declarations are no longer covered by LineLength check (commit #9a39d19, mentioned in release notes as "bug fix")
6.4.1
– property immutableClassNames renamed to immutableClassCanonicalNames in VisibilityModifier check (commit #de4485a, mentioned in release notes as "bug fix")
6.3
– Issue #585 mentioned as the only breaking change in the release notes is not in fact breaking anything, but the IllegalType check got its default illegal types changed (commit #677acc1)
5.8
TypeName check now covers enums and annotations (commits #686d009 and #f3d4337, mentioned in release notes as "new feature" and "bug fix")

This is not a complete list of breaking changes - only the first breaking change was confirmed, but more may exist. The breaking change may not affect your configuration, if you don’t use the changed check.

D. Public API backward compatible?

A check mark in this column indicates that a version upgrade of Checkstyle from the previous version does not require changes to a custom check, as long as that custom check uses only the public API. Cases where the custom check is implemented by subclassing a built-in check were not considered. Also, changes to test code were not considered, so it is possible that unit tests would fail but production code would not. Only the differences to the immediately preceding version are considered.
This information was primarily gathered from the release notes, but additional analysis of the commit history on GitHub has turned up further breaking changes:

Checkstyle
– Breaking Change
6.12
– public method renamed in utils/CheckUtils (commit #e2b4e68)
6.9
– public methods removed from api/JavadocTagInfo (commit #534536a)
6.6
– public method getFilename() renamed to getFileName() in api/FileContents (commit #7dd24c8)
5.7
– signature of public method fireErrors() changed in api/MessageDispatcher (commit #1d614c3)

This is not the complete list of undocumented breaking changes - only the first breaking change was confirmed, but more may exist. The breaking change may not affect your custom checks - if you don’t make use of the changed part of the API.

E. Java Version used to run Checkstyle

This is the Java version required by Checkstyle, i.e. the version of the JVM in which the Checkstyle process is running. It has nothing to do with the Java version of the code being analyzed. Java versions are backwards compatible, so only a minimum version is shown. The required Java version is clearly stated in the Checkstyle release notes. Where that did not suffice, the class files of the binary distributions were used to obtain the minimum Java version.

F. Java Version of the code being analyzed

This is the Java version of the code being given to Checkstyle for analysis. Checkstyle must understand its grammar, so there is a maximum Java level for each Checkstyle version, which is clearly stated in the release notes.

G. Checkstyle-IDEA

The compatibility information was obtained by unpacking each version of Checkstyle-IDEA and looking inside which version of Checkstyle it contained. As a cross-check, the version history of Checkstyle-IDEA was referenced.

H. Java Version required by Checkstyle-IDEA

Checkstyle-IDEA sometimes requires a more recent Java version than Checkstyle itself. Depending on the Checkstyle-IDEA version, it may be required to run IntelliJ IDEA at a particular Java level, which is given in this column. The information was obtained by looking inside the org.infernus.idea.checkstyle.CheckStylePlugin class file and reading the version number of the class file format.

I. Eclipse-CS

Eclipse-CS, the Checkstyle plugin for Eclipse, is very professionally managed. Its version numbers are synched to the Checkstyle version numbers, and every change is meticulously documented in its release notes. The required Java level is the same as for Checkstyle itself.

J. Maven Checkstyle Plugin

For the Maven Checkstyle Plugin, its POM files where analyzed as found on Maven Central. This column can have one of the following entries:

Entry
– Description
– This version of Checkstyle can be used, but must be configured explicitly. Be sure to choose the base version of the plugin to match your Java version (for example, use 2.15 if on Java 6). In 2015, the Checkstyle team has started checking compatibility with the Maven Checkstyle Plugin in their build process, so it generally works well.
2.15
– The version number of the Maven Checkstyle plugin which is configured to use this version of Checkstyle by default. This implies a checkmark (✓).
(✓) or (2.4)
– This version of Checkstyle can be used, but it is not available on Maven Central, so you would have to provide it via your own infrastructure.
--
– This version of Checkstyle cannot be used with Maven.

TODO We may have to improve on this data by actually trying the different combinations of Maven Plugin and Checkstyle versions, because breaking changes are introduced and may forbid specific combinations.

K. Gradle

In Gradle 1.0, the Gradle Checkstyle plugin was created by extracting it out of the Code Quality plugin which existed in Gradle 0.9. At the same time, the toolVersion property was introduced to the Gradle Checkstyle plugin, which allows choosing the Checkstyle version to run. Previous versions of Gradle used hardcoded Checkstyle versions, which is why they are not included in our matrix.
Up to a breaking change in Checkstyle 6.8 (Checkstyle issue #1108), Gradle was compatible with all versions of Checkstyle that are available on Maven Central or Bintray jcenter. Checkstyle 5.2 is the oldest version available there, so it is also the oldest you can use with Gradle, unless you are willing to provide it via your own infrastructure. Because of this, the corresponding entries are set in parentheses.
This data was gathered by GitHub source code analysis.

L. Gradle Checkstyle Plugin

This column shows which versions of Checkstyle are used as the default version by the Gradle Checkstyle Plugin. This information was gained by analyzing the source code of the plugin on GitHub. The default version gets used when toolVersion is not set. A checkmark (✓) indicates that the Checkstyle version is available via toolVersion, but not by default. The bottom line is that one should always set toolVersion.
Entries are set in parentheses when either the Checkstyle version is less than 5.2 (because then it is not available on Maven Central or Bintray jcenter), or the Gradle version is less than 1.0 (because then no Gradle Checkstyle plugin exists).

M. Checkstyle Addons

Checkstyle Addons features a build process that actually tries running the compiled checks against every single Checkstyle runtime (example log file). Since we have very high test coverage, the fact that all unit tests complete successfully against a Checkstyle runtime is significant. Checkstyle Addons also includes a reflection-based component that smoothes over the API differences between Checkstyle versions, so that we have full compatibility with almost every recent Checkstyle version.

N. SevNTU Checkstyle

For SevNTU Checkstyle, source versions are tagged on GitHub for versions 1.8.0 and upwards, so source archives are easily available for downloading. For versions down to 1.5.x, POM files could still be found with the binaries which give information on the Checkstyle version for which that version of SevNTU Checkstyle was built. For versions 1.8.0 and upwards, SevNTU Checkstyle is compiled and the unit tests are executed against the different Checkstyle runtimes. When all tests pass without errors, the versions are considered compatible. Versions declared in the POM files are always considered compatible (and proved to be so in the tests conducted). Compilation and tests for SevNTU Checkstyle versions 1.13.0 and upwards were performed with Java 7, all previous versions were compiled and tested with Java 6.
Compatibility was analyzed based on the assumption that the full SevNTU Checkstyle feature set is required to work. In many cases, only a handful of tests were failing, so it may still be an option to use SevNTU Checkstyle with an incompatible version of Checkstyle, if the subset of SevNTU checks you are using work.
Also, you may be able to set up the SevNTU checks in a separate job with a configuration file of its own. That second job would use a version of Checkstyle that is compatible with SevNTU Checkstyle (for example, v6.6).

O. SonarQube Checkstyle Plugin

The SonarQube Checkstyle Plugin lists the Checkstyle versions it uses on its website. The given version of Checkstyle is bundled with the plugin and cannot be changed. The plugin has a dependency on the SonarQube platform and the SonarQube Java plugin. Updates to this plugin are quite rare, so only a small number of Checkstyle versions are supported by SonarQube.

P. SonarQube Platform

This column shows the version of the SonarQube platform (a.k.a. the SonarQube version) required to run the SonarQube Checkstyle plugin at the given version.

Q. SonarQube Java Plugin

This column shows the version of the SonarQube Java Plugin required to run the SonarQube Checkstyle plugin at the given version. This was obtained by looking at the manifest.mf entry in the plugin’s JAR file.

Jenkins / Bamboo

Jenkins does not run Checkstyle, but parses the XML report generated by Checkstyle. Still, it needs to understand what it sees. It seems that the format of the XML report created by Checkstyle has been quite stable over time. A detailed analysis of Jenkins and Bamboo plugin compatibility may be added to this page in the future.