将PMD的复制/粘贴检测器与Gradle一起使用

Mat*_*aun 4 ant pmd gradle

我想在我的Gradle构建中使用复制/粘贴检测器.

这就是为什么我决定将以下Ant任务(我在这里找到)转换为Gradle语法:

<target name="cpd">
    <taskdef name="cpd" classname="net.sourceforge.pmd.cpd.CPDTask" />
    <cpd minimumTokenCount="100" outputFile="/home/tom/cpd.txt">
        <fileset dir="/home/tom/tmp/ant">
            <include name="**/*.java"/>
        </fileset>
    </cpd>
</target>
Run Code Online (Sandbox Code Playgroud)

这就是翻译目前的样子:

check << {
        ant.taskdef(name: 'cpd', classname: 'net.sourceforge.pmd.cpd.CPDTask', classpath: configurations.pmd.asPath)
        ant.cpd(minimumTokenCount: '100', outputFile: file('build/reports/pmd/copyPasteDetector.txt').toURI().toString()) {
            fileset(dir: 'src'){
                include(name: '**.java')
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,调用gradle check产生了一个net.sourceforge.pmd.cpd.ReportException,堆栈跟踪在这里.

如何使用Gradle 1.9使用复制/粘贴检测器扫描源代码?

谢谢!

And*_*mid 7

您也可以使用我的gradle-cpd-plugin.有关详细信息,请参阅https://github.com/aaschmid/gradle-cpd-plugin.应用cpd插件会自动将其添加cpdcheck任务的依赖项.

注意:我cpd对扩展名称(参见toolVersion)和任务,建议欢迎不满意;-)

目前,它是0.1版本,但我正在内部切换使用CPD的ant任务直接调用它.这将包括所有参数的支持等.这是一个用法示例:

apply plugin: 'cpd'

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'de.aaschmid.gradle.plugins:gradle-cpd-plugin:0.1'
    }
}

// optional - default is 5.1.0
cpd {
    toolVersion = '5.0.5'
}

tasks.cpd {
    reports {
        text.enabled = true
        xml.enabled = false
    }
    source = files('src/main/java')
}
Run Code Online (Sandbox Code Playgroud)