Gradle 带渐变的PMD排除模式

Gradle 带渐变的PMD排除模式,gradle,pmd,Gradle,Pmd,我正在尝试为Gradle中的PMD任务创建一些排除模式 我的任务以下一种方式生成: /* Allows generation of pmd config */ allprojects { apply plugin: 'pmd' } gradle.projectsEvaluated { subprojects.each() { project -> if (project.hasProperty('android')) { p

我正在尝试为Gradle中的PMD任务创建一些排除模式

我的任务以下一种方式生成:

/* Allows generation of pmd config  */
allprojects {
    apply plugin: 'pmd'
}
gradle.projectsEvaluated {

    subprojects.each() { project ->


        if (project.hasProperty('android')) {

            project.task("runPmd", type: Pmd) {

                description "Run pmd"
                group 'verification'

                source = fileTree("${project.projectDir}/src/main/java")
                ruleSetFiles = files("${project.rootDir}/build-tools/pmd.xml")
                ignoreFailures = true

                reports {
                    xml.enabled = true
                    html.enabled = true
                }
            }

        }
    }
}
规则集是:

<?xml version="1.0" encoding="UTF-8"?>
<ruleset name="MyCompany ruleset"
    xmlns="http://pmd.sourceforge.net/ruleset/2.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd">

    <description>
        MyCompany ruleset for Android PMD
    </description>

  <exclude-pattern>.*/org/jivesoftware/.*</exclude-pattern>
  <exclude-pattern>.*/net/java/.*</exclude-pattern>

...rules...
</ruleset>

Android PMD的MyCompany规则集
.*/org/jivesoftware/*
.*/net/java/*
…规则。。。
但在我的报告中,我得到:


我做错什么了吗?检查答案似乎是我在定义排除模式,但pmd正在分析这些文件。

我遇到了同样的问题,添加了一个空的
规则集[]
属性似乎为我解决了这个问题。
确保定义实际要在规则集文件中应用的规则-即,将它们从
规则集
属性块移动到文件中(如果有)

这就是我的任务生成的样子:

// PMD
afterEvaluate {
    def variants = plugins.hasPlugin('com.android.application') ?
            android.applicationVariants : android.libraryVariants

    variants.each { variant ->
        def task = tasks.create("pmd${variant.name.capitalize()}", Pmd)

        task.group = 'verification'
        task.description = "Run PMD for the ${variant.description}."

        task.ruleSetFiles = files("pmd-ruleset.xml")
        task.ruleSets = []

        task.reports {
            xml.enabled = false
            html.enabled = true
        }

        def variantCompile = variant.javaCompile

        task.source = variantCompile.source

        task.dependsOn(variantCompile)
        tasks.getByName('check').dependsOn(task)
    }
}
我从这条线索中得到了提示:

这看起来不错。你的报告肯定是最新的吗?它是否引用了正确的规则文件?抱歉问了这些愚蠢的问题;-)但是图案看起来不错。谢谢你的回答。是的,我做了一个./gradlew清理,只是为了确保它被更新。规则文件中的任何包含模式在稍后浮动,可能会再次放入文件?不,我没有复制完整文件,因为有很多规则,但它没有包含模式检查
*/org/jivesoftware/*
中的所有文件还是一些?
Add below snippet in your build.gradle, you can exclude Classes and packages also
pmd {
    sourceSets = [ project.sourceSets.main ]
    ruleSetFiles = rootProject.files("codequality/pmd-ruleset.xml")
    ruleSets = []

    pmdMain {
        excludes = [
                '**/Application.*',
                '**/jivesoftware/.*'
        ]
    }
}