Awesome
gradle-code-quality-tools-plugin
Gradle plugin that configures Checkstyle, PMD, CPD, Lint, Detekt & Ktlint. All of these tools are also automatically hooked into the check
gradle task. Below, I'll go more into depth how each of those plugins are configured.
This plugin requires Gradle 5.0 or later.
Set up
root/build.gradle
buildscript {
repositories {
mavenCentral()
google()
}
dependencies {
classpath "com.vanniktech:gradle-code-quality-tools-plugin:0.24.0"
}
}
apply plugin: "com.vanniktech.code.quality.tools"
Snapshot
buildscript {
repositories {
maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
}
dependencies {
classpath "com.vanniktech:gradle-code-quality-tools-plugin:0.25.0-SNAPSHOT"
}
}
apply plugin: "com.vanniktech.code.quality.tools"
Configuration
The philosophy of this plugin is to fail early. This means having zero warnings / errors reported from any tools. If you're just getting started with this in a large code base you might not be able to achieve this right away in which case you might want to set failEarly
to false
and then apply at a finer more granular scope how each tool should behave e.g. checkstyle { ignoreFailures = false }
.
Those are all the available configurations - shown with default values and their types. More information can be found in the Kotlin Documentation of the Extension and the respective extensions for designated integrations.
codeQualityTools {
boolean failEarly = true
boolean xmlReports = true
boolean htmlReports = false
boolean textReports = false
String[] ignoreProjects = []
checkstyle {
boolean enabled = true
String toolVersion = '8.6'
String configFile = 'code_quality_tools/checkstyle.xml'
Boolean ignoreFailures = null
Boolean showViolations = null
String source = 'src'
List<String> include = ['**/*.java']
List<String> exclude = ['**/gen/**']
}
pmd {
boolean enabled = true
String toolVersion = '6.0.0'
String ruleSetFile = 'code_quality_tools/pmd.xml'
Boolean ignoreFailures = null
String source = 'src'
List<String> include = ['**/*.java']
List<String> exclude = ['**/gen/**']
}
lint {
boolean enabled = true
Boolean textReport = true
String textOutput = 'stdout'
Boolean abortOnError = null
Boolean warningsAsErrors = null
Boolean checkAllWarnings = null
String baselineFileName = null
Boolean absolutePaths = null
File lintConfig = null
Boolean checkReleaseBuilds = false
Boolean checkTestSources = null
Boolean checkDependencies = null
}
ktlint {
boolean enabled = true
String toolVersion = '0.32.0'
boolean experimental = false
}
detekt {
boolean enabled = true
String toolVersion = '1.0.0'
String config = 'code_quality_tools/detekt.yml'
String baselineFileName = null
boolean failFast = true
}
cpd {
boolean enabled = true
String source = 'src'
String language = 'java'
Boolean ignoreFailures = null
int minimumTokenCount = 50
}
kotlin {
boolean allWarningsAsErrors = true
}
}
Tools
Here I'll give a bit more information about how each of the tools will be applied. If there's a Gradle task that this plugin will generate it will also be hooked up into the check
Gradle task. This means that when you execute check
all of the rools will be running for you.
Checkstyle
It'll apply the Checkstyle Plugin and generate the checkstyle
task that will execute checkstyle. The configuration properties of codeQualityTools -> checkstyle
mirror the properties from the plugin.
PMD
It'll apply the PMD Plugin and generate the pmd
task that will execute pmd. The configuration properties of codeQualityTools -> pmd
mirror the properties from the plugin.
CPD
It'll apply the CPD Plugin and generate the cpdCheck
task that will execute cpd. The configuration properties of codeQualityTools -> cpd
mirror the properties from the plugin.
Lint
This will only work when one of the Android Plugins (com.android.application
, com.android.library
, etc.) are applied. The configuration properties of codeQualityTools -> lint
mirror the properties from the lintOptions.
Detekt
It'll use the specified detekt version and generate the detektCheck
task which will run detekt on your code base.
Ktlint
It'll use the specified ktlint version and then generate two tasks. ktlint
which will run ktlint over your code and flag issues. ktlintFormat
will reformat your code.
Note: There might be some configuration properties that are not mirrored in which case feel free to open a PR. Personally, I don't have the need for all of them.
License
Copyright (C) 2016 Vanniktech - Niklas Baudy
Licensed under the Apache License, Version 2.0