Gradle for Android:为什么 javaexec 不获取我的类路径?
Gradle for Android: Why doesn't javaexec pick up my classpath?
我有一个 Android 项目(在 Windows 上),我正在尝试 运行 cucumber-jvm 作为 非仪器化 "unit test"。 IE。当我 运行 gradlew test
.
时执行 Cucumber 功能
这是我的应用程序的相关部分 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 - 我知道 cucumber-jvm 的预期用途是 instrumented 测试使用 cucumber-android.我有一个 运行ning Cucumber 作为 "local unit test" 的特定用例(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()
的调用返回了一个空文件集合。同时,在 unitTests.all
的闭包中,getClassPath()
包含正确的类路径。
通过变量将类路径从外部闭包传递到内部闭包,cucumber.api.cli.Main
现在 运行 成功并且我的 Cucumber 功能 运行 作为 [=23] 的一部分=] test
任务。
我有一个 Android 项目(在 Windows 上),我正在尝试 运行 cucumber-jvm 作为 非仪器化 "unit test"。 IE。当我 运行 gradlew test
.
这是我的应用程序的相关部分 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 - 我知道 cucumber-jvm 的预期用途是 instrumented 测试使用 cucumber-android.我有一个 运行ning Cucumber 作为 "local unit test" 的特定用例(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()
的调用返回了一个空文件集合。同时,在 unitTests.all
的闭包中,getClassPath()
包含正确的类路径。
通过变量将类路径从外部闭包传递到内部闭包,cucumber.api.cli.Main
现在 运行 成功并且我的 Cucumber 功能 运行 作为 [=23] 的一部分=] test
任务。