繁体   English   中英

适用于Android的Gradle:javaexec为什么不选择我的类路径?

[英]Gradle for Android: Why doesn't javaexec pick up my classpath?

我有一个Android项目(在Windows上),我试图在其中运行Cucuming-jvm作为非仪器化的 “单元测试”。 即当我运行gradlew test时执行Cucumber功能。

这是我的应用程序build.gradle的相关build.gradle

android {
    ...
    testOptions {
        unitTests.all {
            javaexec {
                main = "cucumber.api.cli.Main"
                classpath = getClasspath()
                args = ['--plugin', 'pretty', '--glue', 'gradle.cucumber', 'src/test/java/cucumber/assets']
            }
        }
    }
}
dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.android.support:appcompat-v7:28.0.0-rc02'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    testImplementation 'io.cucumber:cucumber-java:3.0.2'
    testImplementation 'io.cucumber:cucumber-junit:3.0.2'
}

当我在命令行上运行gradlew test --info时,出现以下错误:

Starting process 'command 'C:\Program Files\Java\jdk1.8.0_162\bin\java.exe''. Working directory: C:\dev\urig\android-cucumber\app Command: C:\Program Files\Java\jdk1.8.0_162\bin\java.exe -Dfile.encoding=windows-1252 -Duser.country=US -Duser.language=en -Duser.variant cucumber.api.cli.Main --plugin pretty --glue gradle.cucumber src/test/java/cucumber/assets
Successfully started process 'command 'C:\Program Files\Java\jdk1.8.0_162\bin\java.exe''
Error: Could not find or load main class cucumber.api.cli.Main

在我看来,该命令不包含类路径,而我的问题是-为什么?

PS-我已经验证了,在调用javaexec ,对getClasspath()的调用确实包含了Groovy的所有相关性: println getClasspath().any { println it }

PPS-我知道cumulage-jvm的预期用途是用于使用cucumber-android进行的仪器测试。 我有一个特定的用例,可以将Cucumber作为“本地单元测试”运行(Android术语,不是我的),因此上述内容对我没有帮助。

我相信我已经为我的问题找到了解决方案。 这是对我有用的代码:

testOptions {
    unitTests.all {
        def classpath2 = getClasspath()
        javaexec {
            main = "cucumber.api.cli.Main"
            classpath = classpath2
            args = ['--plugin', 'pretty', '--glue', 'gradle.cucumber', 'src/test/java/cucumber/assets']
        }
    }
}

在我看来,我最初对javaexec闭包内的getClassPath()javaexec返回了一个空文件集合。 同时,在unitTests.all的闭包中, getClassPath()包含正确的类路径。

现在,通过变量cucumber.api.cli.Main .api.cli.Main将类路径从外部闭包传递到内部闭包中,现在可以成功运行,并且我的Cucumber功能作为Gradle test任务的一部分运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM