代码之家  ›  专栏  ›  技术社区  ›  urig

gradleforandroid:javaexec为什么不选择我的类路径?

  •  0
  • urig  · 技术社区  · 6 年前

    cucumber-jvm 作为一个 非仪表化 “单元测试”。也就是说,当我运行时执行黄瓜特性 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
    

    附言 javaexec 呼叫 getClasspath() 实际上,它包含了Groovy的所有依赖项: println getClasspath().any { println it }

    聚苯硫醚 -我知道黄瓜jvm的用途是 测试使用 cucumber-android . 我有一个将Cucumber作为“本地单元测试”(Android术语,而不是我的)运行的特定用例,因此上面的内容对我没有太大帮助。

    1 回复  |  直到 6 年前
        1
  •  0
  •   urig    6 年前

    我相信我已经找到了解决问题的办法。以下是对我有效的代码:

    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']
            }
        }
    }
    

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

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