我正在使用Gradle 1.9,android插件的版本是0.7.3。 你可能知道,android插件有两个输出 - debug和release。
我的项目取决于另一个项目。
我已经创建了自己的任务来执行单元测试。这取决于调试输出。
这是它在主项目的build.gradle
文件中的定义。
sourceSets {
unitTest {
java.srcDirs = ['tests']
}
}
dependencies {
unitTestCompile files("build/classes/debug") //This is the debug output of the main project
unitTestCompile files("../otherproject/build/classes/debug") //This is the debug output of the other project
unitTestCompile 'junit:junit:4.11'
unitTestCompile 'org.robolectric:robolectric:2.2'
unitTestCompile 'com.google.android:android:4.1.1.4'
unitTestCompile 'org.mockito:mockito-all:1.9.5'
}
configurations {
unitTestCompile.extendsFrom compile
unitTestCompile.extendsFrom runTime
unitTestRuntime.extendsFrom unitTestCompile
unitTestEclipseCompile {
extendsFrom unitTestCompile
exclude group: "com.google.android", name: "android"
transitive = false
}
}
task unitTest(type:Test, dependsOn: assemble) {
description = "run unit tests"
testClassesDir = project.sourceSets.unitTest.output.classesDir
classpath = project.sourceSets.unitTest.runtimeClasspath
}
问题是没有生成调试输出,所以当我在命令行中输入gradle unitTest
时,我得到java.lang.ClassNotFoundException
。
为了生成调试输出,我必须在运行unitTest之前显式运行gradle assembleDebug
。
我尝试了以下几项,但都没有效果:
unitTest.dependsOn assembleDebug
assembleDebug.outputs.upToDateWhen { false }
无论任务是否过时,问题都不会消失,因此,例如,如果我对其中一个源文件稍作修改,然后运行gradle unitTest
,使用新的.class
文件生成释放输出,但调试输出不是。