如何在gradle exec中使用正则表达式?

如何在gradle exec中使用正则表达式?,gradle,jacoco,Gradle,Jacoco,由于无法使用Gradle集成的jacoco插件,因此存在跳过任务的问题。我试着用和 def reportTask=tasks.create(reportTaskName,Exec.class){ 组='报告' description=“在${buildVariant.capitalize()}build by命令行界面上生成端到端Android测试Jacoco覆盖率报告。” workingDir“${project.buildDir}” 命令行“java”、“-jar”、“${jacoccli}

由于无法使用Gradle集成的jacoco插件,因此存在跳过任务的问题。我试着用和

def reportTask=tasks.create(reportTaskName,Exec.class){
组='报告'
description=“在${buildVariant.capitalize()}build by命令行界面上生成端到端Android测试Jacoco覆盖率报告。”
workingDir“${project.buildDir}”
命令行“java”、“-jar”、“${jacoccli}”、“report”、“${project.buildDir}/outputs/code_coverage/${buildVariant}AndroidTest/connected/*.ec”,
“--classfiles”、“${project.buildDir}/intermediates/javac/${buildVariant}/classes/”,
“--classfiles”、“${project.buildDir}/tmp/kotlin classes/${buildVariant}/”,
“--html”、“${project.buildDir}/jacocoReport/jacochtml/”,
“--sourcefiles”、“${project.projectDir}/src/main/java”,
--xml“,“${project.buildDir}/jacocoReport/jacocxml.xml”
}
报告任务
当我运行此任务时,我得到:

> Task :qtx:jacocoEtoeAndroidTestReportByCLI FAILED
[INFO] Loading execution data file <xxx>/build/outputs/code_coverage/etoeDebugAndroidTest/connected/*.ec.
Exception in thread "main" java.io.FileNotFoundException: <<xxx>>/build/outputs/code_coverage/etoeDebugAndroidTest/connected/*.ec (No such file or directory)
>任务:qtx:JacoceToeAndroidTestReportByCLI失败
[INFO]正在加载执行数据文件/build/outputs/code_coverage/etoeDebugAndroidTest/connected/*.ec。
线程“main”java.io.FileNotFoundException:/build/outputs/code_coverage/etoeDebugAndroidTest/connected/*.ec中出现异常(无此类文件或目录)
但是,如果我在终端中执行它,如下图所示,任务将成功

这两种用法之间有什么区别?如何在Gradle Exec中使用正则表达式


更新
def\u createAndroidTestCoverageReportByCLI(productFlavorName=”“){
def buildTypeName=“调试”
def构建变量
buildVariant=“${productFlavorName}${buildTypeName.capitalize()}”
def getExecDataTaskName=“${ANDROID_测试_报告_任务_前缀}${productFlavorName.capitalize()}${ANDROID_测试_报告_任务_后缀}ExecDataGetter”
def reportTaskName=“${ANDROID\u TEST\u REPORT\u TASK\u PREFIX}${productFlavorName.capitalize()}${ANDROID\u TEST\u REPORT\u TASK\u sufix}ByCLI”
def jacoccli
字符串执行数据
project.rootProject.allprojects.each{project->
如果(project.name==“testlib”){
jacoccli=“${project.projectDir}/lib/jacoccli.jar”
}
}
def getExecDataTask=tasks.create(getExecDataTaskName,jacoReport.class){
def listEc=[]
def dir=新文件(“${project.buildDir}/outputs/code_coverage/${buildVariant}AndroidTest/connected/”)
dir.eachFileRecurse(){file->
listEc任务:qtx:JacoceToeAndroidTestReportByCLI失败
任务“:qtx:jacoceToeAndroidTestReportByCLI”的执行失败。
>启动进程“command”java-jar/testlib/lib/jacocoli.jar report/QTX/build/outputs/code_coverage/etodedbugandroidtest/connected/spoon1619160691046.ec/QTX/build/outputs/code_coverage/etodedbugandroidtest/etodedbugandroidtest/connected/spoon1619160787358.ec时出现问题--classfiles/QTX/build/intermediates/javac/etoeDebug/classes/--classfiles/QTX/build/tmp/kotlin classes/etoeDebug/--html/QTX/build/jacocoReport/jacochtml/--sourcefiles/QTX/src/main/java--xml/QTX/build/jacocoReport/jacocxml.xml''
我试图通过列表传入
execfiles
,任务仍然失败。当我将失败的命令复制到终端执行时,它可以成功执行


为什么?如何在Gradle中执行它?

只需使用
executionData传递它,或者运行一个shell脚本即可。回答您的问题:这是否回答了您的问题?您的意思是使用shell脚本吗?可以使用shell脚本,如第二个命令行示例。“*”可以识别为通配符。我希望gradle配置中的“*”也可以正确识别为通配符而不是字符串。>找不到参数[file collection]的方法executionData()在任务上:类型为org.gradle.api.tasks.Exec的qtx:jacoceToeAndroidTestReportByCLI。如何将jacoReport任务中的执行数据传递给执行任务?
def _createAndroidTestCoverageReportByCLI(productFlavorName = "") {
    def buildTypeName = "debug"
    def buildVariant
    buildVariant = "${productFlavorName}${buildTypeName.capitalize()}"
    def getExecDataTaskName = "${ANDROID_TEST_REPORT_TASK_PREFIX}${productFlavorName.capitalize()}${ANDROID_TEST_REPORT_TASK_SUFFIX}ExecDataGetter"
    def reportTaskName = "${ANDROID_TEST_REPORT_TASK_PREFIX}${productFlavorName.capitalize()}${ANDROID_TEST_REPORT_TASK_SUFFIX}ByCLI"
    def jacocoCLI
    String execData

    project.rootProject.allprojects.each { project ->
        if (project.name == "testlib") {
            jacocoCLI = "${project.projectDir}/lib/jacococli.jar"
        }
    }

    def getExecDataTask = tasks.create(getExecDataTaskName, JacocoReport.class) {
        def listEc = []
        def dir = new File("${project.buildDir}/outputs/code_coverage/${buildVariant}AndroidTest/connected/")
        dir.eachFileRecurse() { file ->
            listEc << file
        }
        execData = listEc.join(" ")
    }

    def reportTask = tasks.create(reportTaskName, Exec.class) {
        group = 'Reporting'
        description = "Generate End To End Android Test Jacoco coverage reports on the ${buildVariant.capitalize()} build by Command Line Interface."

        workingDir "${project.buildDir}"
//        commandLine "java", "-jar", "${jacocoCLI}", "report", "${execData}",
//                "--classfiles", "${project.buildDir}/intermediates/javac/${buildVariant}/classes/",
//                "--classfiles", "${project.buildDir}/tmp/kotlin-classes/${buildVariant}/",
//                "--html", "${project.buildDir}/jacocoReport/jacocoHtml/",
//                "--sourcefiles", "${project.projectDir}/src/main/java",
//                "--xml", "${project.buildDir}/jacocoReport/jacocoXml.xml"

        commandLine "java -jar ${jacocoCLI} report ${execData} --classfiles ${project.buildDir}/intermediates/javac/${buildVariant}/classes/ --classfiles ${project.buildDir}/tmp/kotlin-classes/${buildVariant}/ --html ${project.buildDir}/jacocoReport/jacocoHtml/ --sourcefiles ${project.projectDir}/src/main/java --xml ${project.buildDir}/jacocoReport/jacocoXml.xml"
    }
    reportTask.dependsOn getExecDataTask
}
> Task :qtx:jacocoEtoeAndroidTestReportByCLI FAILED

Execution failed for task ':qtx:jacocoEtoeAndroidTestReportByCLI'.
> A problem occurred starting process 'command 'java -jar <RepoPath>/testlib/lib/jacococli.jar report <RepoPath>/QTX/build/outputs/code_coverage/etoeDebugAndroidTest/connected/spoon1619160691046.ec <RepoPath>/QTX/build/outputs/code_coverage/etoeDebugAndroidTest/connected/spoon1619161047292.ec <RepoPath>/QTX/build/outputs/code_coverage/etoeDebugAndroidTest/connected/spoon1619160787358.ec --classfiles <RepoPath>/QTX/build/intermediates/javac/etoeDebug/classes/ --classfiles <RepoPath>/QTX/build/tmp/kotlin-classes/etoeDebug/ --html <RepoPath>/QTX/build/jacocoReport/jacocoHtml/ --sourcefiles <RepoPath>/QTX/src/main/java --xml <RepoPath>/QTX/build/jacocoReport/jacocoXml.xml''