我想在常规编译期间使用openclover来检测源代码文件,因为我想在服务器环境中使用它。 这个想法是针对已检测的源代码运行我们的硒测试,并以此方式获得代码覆盖率。同样,这可以用于重播标准使用场景并找到热点进行优化。 为此,标准构建需要检测源代码文件。
我创建了一个类似于显示的here的build.gradle。
摘要:
sourceSets {
clover {
java {
srcDir "$buildDir/sources-instr"
}
}
}
task cloverInstr() {
inputs.files sourceSets.main.allJava
outputs.dir "$buildDir/sources-instr"
doFirst {
[...]
com.atlassian.clover.CloverInstr.mainImpl(args)
}
}
cloverClasses.dependsOn cloverInstr
test {
def cloverClasspath = configurations.testRuntime + configurations.cloverRuntime + sourceSets.test.output + sourceSets.clover.output
classpath = cloverClasspath
}
这将测试任务更改为使用三叶草源集中的类而不是主源集中的类。我想对主要源集中的类进行预处理。
所以我的想法是:main: instrument -> compile -> jar
,而所示的解决方案正在使用两个源集:
main: compile -> jar
clover: instrument -> compile -> test
用三叶草检测源文件并将其传递给编译的最佳方法是什么?理想情况下,我什至会有一个启用或禁用检测的开关。
答案 0 :(得分:0)
交换源集有效。使用-PwithClover
时,以下部分被激活。它将主源集更改为检测代码所在的路径。然后,编译任务将获得一个依赖关系,该依赖关系会将代码检测到相同的路径。
有点黑,但是可以用。
if (project.hasProperty("withClover")) {
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'org.openclover:clover:4.3.1'
}
}
configurations {
cloverRuntime
cloverRuntime.extendsFrom cloverCompile
}
//swap src dirs, main is now the instrumented and clover the actual srcs
sourceSets {
main {
java {
srcDirs = ["$buildDir/sources-instr"]
}
}
clover {
java {
srcDirs = ["src/main/java"]
}
}
}
dependencies {
//compile 'org.openclover:clover:4.3.1'
// make sure clover is available in the jar
embed 'org.openclover:clover:4.3.1'
}
//instrumentation task
task cloverInstr() {
inputs.files sourceSets.clover.allJava
outputs.dir "${buildDir}/sources-instr"
doFirst {
def argsList = ["--initstring", "${buildDir}/clover/clover.db",
"-d", "${buildDir}/sources-instr"]
argsList.addAll(inputs.files.files.collect({ file ->
file.absolutePath
}))
String[] args = argsList.toArray()
com.atlassian.clover.CloverInstr.mainImpl(args)
}
}
//create src files for main src set
compileJava.dependsOn "cloverInstr"
}