插件似乎不支持这种行为。我必须下载源代码并为自己创建一个自定义版本。
我已成功检测并报告了我所有 Grails 应用程序的直接插件及其传递插件。
您需要在几个地方修改代码覆盖的 _Events.groovy 才能让事情正常工作。
仪器
修改 AntInstrumentationBuildfileBuilder.build()。它使用 MarkupBuilder 构建运行 Cobertura 的 Ant XML。我添加了下面的“extraClassesDir”:
File extraClassesDir = new File('/path/to/grails/project/target/work/plugin-classes')
...
'target'(name: 'instrument') {
'cobertura-instrument'(instrumentArguments) {
'fileset'(dir: "${classesDir.absolutePath}") {
'include'(name: "**/*.class")
codeCoverageExclusionList.each { pattern ->
'exclude'(name: "${pattern}")
}
}
// My additions:
'fileset'(dir: extraClassesDir.absolutePath) {
'include'(name: "**/*.class")
codeCoverageExclusionList.each { pattern ->
'exclude'(name: "${pattern}")
}
}
}
}
报告
以上将检测您的类,但在报告中您将无法跳转到源代码。我通过添加以下内容修改了 createCoverageReports():
if (buildConfig.coverage?.grailsSourceInclusions) {
buildConfig.coverage.grailsSourceInclusions.each {
fileset(dir: "${it}/grails-app/controllers", erroronmissingdir: false)
fileset(dir: "${it}/grails-app/domain", erroronmissingdir: false)
fileset(dir: "${it}/grails-app/services", erroronmissingdir: false)
fileset(dir: "${it}/grails-app/taglib", erroronmissingdir: false)
fileset(dir: "${it}/grails-app/utils", erroronmissingdir: false)
fileset(dir: "${it}/src/groovy", erroronmissingdir: false)
fileset(dir: "${it}/src/java", erroronmissingdir: false)
}
}
基本上为了报告我创建了一个新的配置设置,所以我的 Grails 项目的 BuildConfig.groovy 看起来像:
coverage {
enabledByDefault = false
xml = true
grailsSourceInclusions = [
'/path/to/source/of/plugin1',
'/path/to/source/of/plugin2'
]
}
ANT XML
在 code-coverage 的 _Events.groovy 中,如果您注释掉以下行,您至少可以查看生成的 Ant XML:
println "instrumentBuildFile=$instrumentBuildFile
//instrumentBuildFile.delete()
如果你做对了,你的 XML 应该在底部附近包含如下内容,以使检测工作正常:
<target name="instrument">
<cobertura-instrument datafile="/path/to/grails/project/cobertura.ser">
<fileset dir="/path/to/grails/project/target/classes">
<include name="**/*.class" />
<exclude name="**/*BootStrap*" />
<exclude name="Config*" />
<exclude name="BuildConfig*" />
...
</fileset>
<!-- Here's our addition -->
<fileset dir="/path/to/grails/project/target/work/plugin-classes">
<include name="**/*.class" />
<exclude name="**/*BootStrap*" />
<exclude name="Config*" />
<exclude name="BuildConfig*" />
...
</fileset>
</cobertura-instrument>
</target>