使用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
,它会抱怨不能找到任何来自外部的依赖关系(包括支持库)的类:
有没有人碰到这个问题之前来的呢?这是一个相当封锁:(
答
好,经过进一步调查,我发现,那里有在玩了两件事这里:
- 我有
skipJavaC = true
在androidGroovy
扩展名,因为否则编译器会接管我的cpu,但是 - 这是由于标志
org.gradle.parallel
设置为true引起的。
一旦我评论了两种配置,项目就完美地编译了。通过check
并部署到模拟器:)
答
这个“应该”的工作假设JVM测试运行的方式仍然是以前插孔被添加到工具链相同。这是compileJava仍然是一项任务,因为这是什么Groovy Android插件依赖。
话虽这么说,这是不支持,可能需要挂接到新的进程以不同的方式。
我正在应用Groovy插件的项目是纯Java项目,而不是Android。事实上,如果我禁用了主应用程序模块中的android groovy插件,该应用程序运行时没有问题(但未找到测试) – pablisco
您可能不想跳过javac。当你这样做时,你告诉groovy编译器编译所有可能完全跳过jack和jill编译器的所有东西。 同样这不被支持,并且很可能需要定制您的gradle脚本来完成此操作。 – Pieces
如果没有skipJavaC,编译将永不停止并占用CPU – pablisco