
com.vanniktech.code.quality.tools.CodeQualityToolsPlugin.groovy Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of gradle-code-quality-tools-plugin Show documentation
Show all versions of gradle-code-quality-tools-plugin Show documentation
Gradle plugin that generates ErrorProne, Findbugs, Checkstyle, PMD, CPD, Lint, Detekt & Ktlint Tasks for every subproject.
package com.vanniktech.code.quality.tools
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.plugins.quality.Checkstyle
import org.gradle.api.plugins.quality.FindBugs
import org.gradle.api.plugins.quality.Pmd
class CodeQualityToolsPlugin implements Plugin {
@Override
void apply(final Project rootProject) {
rootProject.extensions.create('codeQualityTools', CodeQualityToolsPluginExtension)
rootProject.codeQualityTools.extensions.create('findbugs', CodeQualityToolsPluginExtension.Findbugs)
rootProject.codeQualityTools.extensions.create('checkstyle', CodeQualityToolsPluginExtension.Checkstyle)
rootProject.codeQualityTools.extensions.create('pmd', CodeQualityToolsPluginExtension.Pmd)
rootProject.codeQualityTools.extensions.create('lint', CodeQualityToolsPluginExtension.Lint)
rootProject.subprojects { subProject ->
afterEvaluate {
def extension = rootProject.codeQualityTools
if (!shouldIgnore(subProject, extension)) {
// Reason for checking again in each add method: Unit Tests (they can't handle afterEvaluate properly)
def hasPmd = addPmd(subProject, rootProject, extension)
def hasCheckstyle = addCheckstyle(subProject, rootProject, extension)
def hasFindbugs = addFindbugs(subProject, rootProject, extension)
def hasLint = addLint(subProject, extension)
def checkTask = tasks.findByName('check')
if (hasPmd) {
tasks.findByName('pmd').dependsOn('assemble')
checkTask.dependsOn('pmd')
}
if (hasFindbugs) {
tasks.findByName('findbugs').dependsOn('assemble')
checkTask.dependsOn('findbugs')
}
if (hasCheckstyle) {
checkTask.dependsOn('checkstyle')
}
if (hasLint) {
checkTask.dependsOn('lint')
}
}
}
}
}
protected static boolean addPmd(final Project subProject, final Project rootProject, final CodeQualityToolsPluginExtension extension) {
if (!shouldIgnore(subProject, extension) && extension.pmd.enabled) {
subProject.plugins.apply('pmd')
subProject.pmd {
toolVersion = extension.pmd.toolVersion
ignoreFailures = !extension.failEarly
ruleSetFiles = subProject.files(rootProject.file(extension.pmd.ruleSetFile))
}
subProject.task("pmd", type: Pmd) {
description = 'Run pmd'
group = 'verification'
ruleSets = []
source = subProject.fileTree('src/main/java')
include '**/*.java'
exclude '**/gen/**'
reports {
html.enabled = extension.htmlReports
xml.enabled = extension.xmlReports
}
}
return true
}
return false
}
protected static boolean addCheckstyle(final Project subProject, final Project rootProject, final CodeQualityToolsPluginExtension extension) {
if (!shouldIgnore(subProject, extension) && extension.checkstyle.enabled) {
subProject.plugins.apply('checkstyle')
subProject.checkstyle {
toolVersion = extension.checkstyle.toolVersion
configFile rootProject.file(extension.checkstyle.configFile)
ignoreFailures = !extension.failEarly
showViolations extension.failEarly
}
subProject.task("checkstyle", type: Checkstyle) {
description = 'Run checkstyle'
group = 'verification'
source 'src'
include '**/*.java'
exclude '**/gen/**'
classpath = subProject.files()
reports {
html.enabled = extension.htmlReports
xml.enabled = extension.xmlReports
}
}
return true
}
return false
}
protected static boolean addFindbugs(final Project subProject, final Project rootProject, final CodeQualityToolsPluginExtension extension) {
if (!shouldIgnore(subProject, extension) && extension.findbugs.enabled) {
final String findbugsClassesPath = isAndroidProject(subProject) ? 'build/intermediates/classes/debug/' : 'build/classes/main/'
subProject.plugins.apply('findbugs')
subProject.findbugs {
sourceSets = []
ignoreFailures = !extension.failEarly
toolVersion = extension.findbugs.toolVersion
effort = 'max'
reportLevel = 'low'
excludeFilter = rootProject.file(extension.findbugs.excludeFilter)
}
subProject.task("findbugs", type: FindBugs) {
description = 'Run findbugs'
group = 'verification'
classes = subProject.fileTree(findbugsClassesPath)
source = subProject.fileTree('src')
classpath = subProject.files()
reports {
html.enabled = extension.htmlReports
xml.enabled = extension.xmlReports
}
}
return true
}
return false
}
protected static boolean addLint(final Project subProject, final CodeQualityToolsPluginExtension extension) {
if (!shouldIgnore(subProject, extension) && extension.lint.enabled && isAndroidProject(subProject)) {
subProject.android.lintOptions {
warningsAsErrors extension.lint.warningsAsErrors != null ? extension.lint.warningsAsErrors : extension.failEarly
abortOnError extension.lint.abortOnError != null ? extension.lint.abortOnError : extension.failEarly
}
if (extension.lint.textReport != null) {
subProject.android.lintOptions {
textReport extension.lint.textReport
textOutput extension.lint.textOutput
}
}
return true
}
return false
}
protected static boolean isAndroidProject(final Project project) {
final boolean isAndroidLibrary = project.plugins.hasPlugin('com.android.library')
final boolean isAndroidApp = project.plugins.hasPlugin('com.android.application')
return isAndroidLibrary || isAndroidApp
}
private static boolean shouldIgnore(final Project project, final CodeQualityToolsPluginExtension extension) {
return extension.ignoreProjects?.contains(project.name)
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy