使用Spock和Java 8运行Android应用程序的问题

问题描述:

这是我的设置。我有一个Android项目与几个Java(而不是Android)模块。使用Spock和Java 8运行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 Studio中收到多个错误。该错误发生在任务:compileDebugGroovyWithJack,它会抱怨不能找到任何来自外部的依赖关系(包括支持库)的类:

enter image description here

有没有人碰到这个问题之前来的呢?这是一个相当*:(

好,经过进一步调查,我发现,那里有在玩了两件事这里:

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

一旦我评论了两种配置,项目就完美地编译了。通过check并部署到模拟器:)

这个“应该”的工作假设JVM测试运行的方式仍然是以前插孔被添加到工具链相同。这是compileJava仍然是一项任务,因为这是什么Groovy Android插件依赖。

话虽这么说,这是不支持,可能需要挂接到新的进程以不同的方式。

+0

我正在应用Groovy插件的项目是纯Java项目,而不是Android。事实上,如果我禁用了主应用程序模块中的android groovy插件,该应用程序运行时没有问题(但未找到测试) – pablisco

+0

您可能不想跳过javac。当你这样做时,你告诉groovy编译器编译所有可能完全跳过jack和jill编译器的所有东西。 同样这不被支持,并且很可能需要定制您的gradle脚本来完成此操作。 – Pieces

+0

如果没有skipJavaC,编译将永不停止并占用CPU – pablisco