PMD 排除模式 gradle

PMD exclude-pattern with gradle

我正在尝试为 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>

但在我的报告中,我得到:

我做错了什么吗?检查 this 答案似乎我正在定义 exclude-pattern 正确,但 pmd 正在分析这些文件。

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

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

// 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)
    }
}

我从这个帖子中得到了提示: http://sourceforge.net/p/pmd/discussion/188193/thread/6e9c6017/

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/.*'
        ]
    }
}

对于我的 ruleset.xml for Gradle pmd 插件,以下命令有效:

<ruleset name="Custom Rules">
  
    <!-- Exclude generated open api classes -->
    <exclude-pattern>.*/src/main/java/com/tbd/tbd/tbd/.*</exclude-pattern>
    <exclude-pattern>.*/src/main/java/com/tbd/tbd/tbd/tbd/.*</exclude-pattern>

    ...

</ruleset>

你能试试下面的命令吗?

  ...
  <exclude-pattern>.*/src/main/java/net/java/.*</exclude-pattern>
  ...