这是我的设置。我有一个带有几个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
并且它抱怨它无法从外部依赖项(包括支持库)中找到任何类:
以前有人遇到过这个问题吗?这是一个非常阻碍者:(
答案 0 :(得分:0)
假设JVM测试运行的方式仍然与将jack添加到工具链之前相同,这应该“正常”工作。这就是compileJava仍然是一项任务,因为这是常规的Android插件所依赖的。
话虽如此,但这不受支持,可能需要以不同的方式挂钩新流程。
答案 1 :(得分:0)
好的,经过一些进一步的调查后,我发现这里有两件事情在哪里:
skipJavaC = true
扩展名中有androidGroovy
,否则编译器会接管我的cpu,但是org.gradle.parallel
设置为true。一旦我注释掉了这两个配置,项目就会完美地编译。两者都通过check
并部署到模拟器:)