使用Spock和Java 8运行Android应用程序时出现问题

时间:2016-05-17 00:44:19

标签: android gradle groovy spock android-jack-and-jill

这是我的设置。我有一个带有几个Java(不是Android)模块的Android项目。

最近我开始使用Spock(这是一个基于JUnit和Groovy的测试框架)。

在Java模块上,我只需使用这样的groovy插件:

apply plugin: 'groovy'

然后包含这些依赖项:

dependencies {
  testCompile 'org.spockframework:spock-core:1.0-groovy-2.4'
  testCompile 'org.codehaus.groovy:groovy-all:2.4.6'
  testCompile 'cglib:cglib-nodep:3.1'
  testCompile 'org.objenesis:objenesis:2.2'
}

在我的主Android应用程序上,我设置了这个。在根项目中,我有这个类路径依赖:

classpath 'org.codehaus.groovy:gradle-groovy-android-plugin:0.3.9'

在应用程序模块上我应用它:

apply plugin: 'groovyx.grooid.groovy-android'

并按此配置:

androidGroovy {
  options {
    configure(groovyOptions) {
      // used so groovy can do it's magic, I think, not 100% sure
      javaAnnotationProcessing = true 
    }
  }
  skipJavaC = true // if disabled my CPU melts for some reason
}

我还使用Android上的Jack标志启用了Java 8:

jackOptions {
  enabled true
}

所有测试都与Spock完美配合(即使是应用程序模块上的测试)。但是,当我尝试在设备或模拟器上运行应用程序时,我从Android工作室获得了多个错误。错误发生在任务:compileDebugGroovyWithJack并且它抱怨它无法从外部依赖项(包括支持库)中找到任何类:

enter image description here

以前有人遇到过这个问题吗?这是一个非常阻碍者:(

2 个答案:

答案 0 :(得分:0)

假设JVM测试运行的方式仍然与将jack添加到工具链之前相同,这应该“正常”工作。这就是compileJava仍然是一项任务,因为这是常规的Android插件所依赖的。

话虽如此,但这不受支持,可能需要以不同的方式挂钩新流程。

答案 1 :(得分:0)

好的,经过一些进一步的调查后,我发现这里有两件事情在哪里:

  • 我在skipJavaC = true扩展名中有androidGroovy,否则编译器会接管我的cpu,但是
  • 这是因为标志org.gradle.parallel设置为true。

一旦我注释掉了这两个配置,项目就会完美地编译。两者都通过check并部署到模拟器:)