0

我在我的 gradle bulid 中添加了 checkstyle 检查。配置是:

checkstyle {
    configFile = new File("${project.projectDir}/config/checkstyle/sun_checks.xml")
    showViolations = false
}

checkstyleMain {
    doLast{
        println("checkstyle main")
        project.ext.checkType = "main"
        tasks.checkstyleReport.execute()
    }
}


checkstyleTest {
    doLast{
        println("checkstyle test")
        project.ext.checkType = "test"
        tasks.checkstyleReport.execute()
    }
}

task checkstyleReport{
    checkstyleReport.outputs.upToDateWhen { false }
}

checkstyleReport << {
    logger.info("Producing checkstyle html report")
    final source = "${project.projectDir}/build/reports/checkstyle/${project.checkType}.xml"
    final xsl = "${project.projectDir}/config/checkstyle/checkstyle-simple.xsl"
    final output = "$buildDir/reports/checkstyle/${project.checkType}.html"
    println(source)
    println(xsl)
    println(output)
    ant.xslt(in: source,
             style: xsl,
             out: output
    )
}

当我调用时:

gradle --daemon clean checkstyleMain checktyleTest

输出是:

...
:clean
:compileJava
:processResources
:classes
:checkstyleMain
checkstyle main
/<root_path_here>/build/reports/checkstyle/main.xml
/<root_path_here>/config/checkstyle/checkstyle-simple.xsl
/<root_path_here>/build/reports/checkstyle/main.html
:compileTestJava
:processTestResources
:testClasses
:checkstyleTest
checkstyle test

如您所见, checkstyleReport 任务被调用两次,但只产生一次输出。我什至尝试过outputs.upToDateWhen { false },但它不起作用。

提前感谢您的帮助。

4

1 回答 1

2

Gradle 任务最多执行一次。此外,不支持显式调用任务,并且会导致各种问题。正确的方法是为每个 Checkstyle 任务声明一个报告任务(例如使用任务配置规则),并使其依赖于该 Checkstyle 任务(或使用mustRunAfter)。

于 2013-06-30T09:35:23.547 回答