Kotlin 在Azure DevOps for Android中运行JaCoCo:找不到方法JacoTestReport()
我们已经在Android Kotlin项目中实现了Jacoco,我们可以通过/gradlew clean build JacoTestReport 但是,当我们部署到VSTS/Azure DevOps时,会出现以下错误:Kotlin 在Azure DevOps for Android中运行JaCoCo:找不到方法JacoTestReport(),kotlin,azure-devops,jacoco,azure-pipelines-build-task,Kotlin,Azure Devops,Jacoco,Azure Pipelines Build Task,我们已经在Android Kotlin项目中实现了Jacoco,我们可以通过/gradlew clean build JacoTestReport 但是,当我们部署到VSTS/Azure DevOps时,会出现以下错误: 2019-02-04T09:37:35.5760285Z BUILD SUCCESSFUL in 12s 2019-02-04T09:37:35.5760428Z 1 actionable task: 1 executed 2019-02-04T09:37:35.5801607
2019-02-04T09:37:35.5760285Z BUILD SUCCESSFUL in 12s
2019-02-04T09:37:35.5760428Z 1 actionable task: 1 executed
2019-02-04T09:37:35.5801607Z SYSTEMVSSCONNECTION exists true
2019-02-04T09:37:35.5816653Z [command]C:\Windows\system32\cmd.exe /D /S /C "C:\vstsagent\A1\_work\2\s\ApolloClient\gradlew.bat clean build jacocoRootReport"
2019-02-04T09:37:36.7652264Z
2019-02-04T09:37:36.7653533Z FAILURE: Build failed with an exception.
2019-02-04T09:37:36.7653767Z
2019-02-04T09:37:36.7653947Z * Where:
2019-02-04T09:37:36.7654401Z Build file 'C:\vstsagent\A1\_work\2\s\ApolloClient\build.gradle' line: 44
2019-02-04T09:37:36.7654582Z
2019-02-04T09:37:36.7654768Z * What went wrong:
2019-02-04T09:37:36.7654952Z A problem occurred evaluating root project 'ApolloClient'.
2019-02-04T09:37:36.7655191Z > Could not find method jacocoTestReport() for arguments [build_abtyecjstjhjqmdmcxnlw2kq0$_run_closure4$_closure8@50246031] on project ':app' of type org.gradle.api.Project.
2019-02-04T09:37:36.7655365Z
2019-02-04T09:37:36.7655547Z * Try:
2019-02-04T09:37:36.7655747Z Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
2019-02-04T09:37:36.7655931Z
2019-02-04T09:37:36.7656098Z * Get more help at https://help.gradle.org
2019-02-04T09:37:36.7656242Z
2019-02-04T09:37:36.7656585Z BUILD FAILED in 1s
2019-02-04T09:37:37.1999815Z Error: C:\vstsagent\A1\_work\2\s\ApolloClient\gradlew.bat failed with return code: 1
2019-02-04T09:37:37.1999996Z at ChildProcess.<anonymous> (C:\vstsagent\A1\_work\_tasks\Gradle_8d8eebd8-2b94-4c97-85af-839254cc6da4\2.143.2\node_modules\vsts-task-lib\toolrunner.js:639:25)
2019-02-04T09:37:37.2000102Z at emitTwo (events.js:106:13)
2019-02-04T09:37:37.2000154Z at ChildProcess.emit (events.js:191:7)
2019-02-04T09:37:37.2000226Z at maybeClose (internal/child_process.js:886:16)
2019-02-04T09:37:37.2000286Z at Process.ChildProcess._handle.onexit (internal/child_process.js:226:5)
2019-02-04T09:37:35.5760285Z 12秒内构建成功
2019-02-04T09:37:35.5760428Z 1可执行任务:1已执行
2019-02-04T09:37:35.5801607Z系统VSS连接是否存在
2019-02-04T09:37:35.5816653Z[命令]C:\Windows\system32\cmd.exe/D/S/C“C:\vstsagent\A1\\u work\2\S\ApolloClient\gradlew.bat clean build JacoRootReport”
2019-02-04T09:37:36.7652264Z
2019-02-04T09:37:36.76533Z失败:生成失败,出现异常。
2019-02-04T09:37:36.7653767Z
2019-02-04T09:37:36.7653947Z*其中:
2019-02-04T09:37:36.7654401Z生成文件'C:\vstsagent\A1\\u work\2\s\ApolloClient\Build.gradle'行:44
2019-02-04T09:37:36.7654582Z
2019-02-04T09:37:36.7654768Z*出了什么问题:
2019-02-04T09:37:36.7654952Z评估根项目“Apollo客户端”时出现问题。
2019-02-04T09:37:36.7655191Z>找不到参数[build\u abtyecjstjhjqmdmcxnlw2kq0$\u run\u closure4]的方法jacotestreport()$_closure8@50246031]在项目上:org.gradle.api.project类型的“应用程序”。
2019-02-04T09:37:36.7655365Z
2019-02-04T09:37:36.7655547Z*试试看:
2019-02-04T09:37:36.7655747Z使用--stacktrace选项运行以获取堆栈跟踪。使用--info或--debug选项运行以获得更多日志输出。使用--scan运行以获得完整的洞察力。
2019-02-04T09:37:36.7655931Z
2019-02-04T09:37:36.7656098Z*获取更多帮助https://help.gradle.org
2019-02-04T09:37:36.7656242Z
2019-02-04T09:37:36.7656585Z生成在1s内失败
2019-02-04T09:37:37.1999815Z错误:C:\vstsagent\A1\\ u work\2\s\ApolloClient\gradlew.bat失败,返回代码:1
2019-02-04T09:37:37.1999996Z在ChildProcess。(C:\vstsagent\A1\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
2019-02-04T09:37:37.2000102Z第二站(events.js:106:13)
2019-02-04T09:37:37.2000154Z位于ChildProcess.emit(events.js:191:7)
2019-02-04T09:37:37.2000226Z(内部/子流程js:886:16)
2019-02-04T09:37:37.2000286Z在进程中。子进程。_handle.onexit(内部/子进程js:226:5)
我不明白的是,它是在寻找一个名为JacoRootReport还是JacoTestReport的任务?我无法获得创建报告的实际gradle过程,所以我找到了解决办法
- 将gradle任务设置为“build jacocoRootReport”
- 使用“发布代码覆盖率结果”任务(设置为使用Jacoco)
- 在顶级
文件中添加Jacoco依赖项:build.gradle
- 将
文件添加到应用程序根目录中。我的看起来像这样:jacoco.gradle
这是相当严重的抄袭。他们也会对不同的产品口味进行测试,我已经把它去掉了。除此之外,上述博客与链接博客的主要区别在于
- 我也掉进了这个洞里,Burf2000的回答让我找到了一些出路。希望这能让其他人在接下来的过程中受益。我的项目是纯Java,而不是像原始问题那样的Kotlin,但我认为这一切都是适用的
在Azure devops for android中运行Jacoco:
杰科科钻头
这假设您一开始没有工作的Jacoco任务。如果这样做,请跳到Azure Devops位
classDirectories
filepath
jacoco.gradle
,Apply from:'../jacoco.gradle'
testCoverageEnabled true
添加到要运行覆盖率度量的所有buildType
/gradlew tasks
,您现在应该会看到报告标题下有一些代码覆盖率任务。运行它们,并确保它们按照您的预期工作,因为反馈循环在下一位会慢很多
蔚蓝的德沃斯比特
Burf2000没有说明他是如何得到无法找到方法jacoTestReport()…
错误的,但我是通过在我的azure pipelines.yml的gradle任务中将codeCoverageToolOption:
设置为“jaCoCo”
得到的。别这样,这是个陷阱。告诉您,如果您的构建已经启用了代码覆盖率,则不应该使用它
相反,您希望将Azure Devops Gradle任务配置为调用先前创建的一个Jacoco任务,然后将PublishCodeCoverageResults任务指向生成的XML。myazure pipelines.yml
文件的相关部分如下所示:
- task: Gradle@2
inputs:
workingDirectory: ""
...
tasks: "assemble test testReleaseUnitTestCoverage"
- task: PublishCodeCoverageResults@1
inputs:
codeCoverageTool: "JaCoCo"
summaryFileLocation: $(System.DefaultWorkingDirectory)/app/build/**/testReleaseUnitTestCoverage.xml
pathToSources: $(System.DefaultWorkingDirectory)/app/src/main/java
failIfCoverageEmpty: true
我也有同样的问题,我也是。遗憾的是,一年多过去了,没有人能解决这个问题。
apply plugin: 'jacoco'
jacoco {
toolVersion = "0.8.5"
}
def buildTypes = android.buildTypes.collect { type -> type.name }
buildTypes.each {
buildTypeName ->
def sourceName, sourcePath
sourceName = sourcePath = "${buildTypeName}"
def testTaskName = "test${sourceName.capitalize()}UnitTest"
task "${testTaskName}Coverage" (type:JacocoReport, dependsOn: "$testTaskName") {
group = "Reporting"
description = "Generate Jacoco coverage reports on the ${sourceName.capitalize()} build."
logger.info(description)
classDirectories = fileTree(
dir: "${project.buildDir}/intermediates/javac/${sourcePath}/classes",
excludes: ['**/R.class', '**/R$*.class', '**/*$ViewInjector*.*', '**/BuildConfig.*', '**/Manifest*.*'] )
def coverageSourceDirs = [
"src/main/java",
"src/$buildTypeName/java"
]
additionalSourceDirs = files(coverageSourceDirs)
sourceDirectories = files(coverageSourceDirs)
executionData = files("${project.buildDir}/jacoco/${testTaskName}.exec")
reports {
xml.enabled = true
html.enabled = true
}
}
}
- task: Gradle@2
inputs:
workingDirectory: ""
...
tasks: "assemble test testReleaseUnitTestCoverage"
- task: PublishCodeCoverageResults@1
inputs:
codeCoverageTool: "JaCoCo"
summaryFileLocation: $(System.DefaultWorkingDirectory)/app/build/**/testReleaseUnitTestCoverage.xml
pathToSources: $(System.DefaultWorkingDirectory)/app/src/main/java
failIfCoverageEmpty: true