Android 单元测试 - 没有这样的 属性:bootClasspath
Android Unit Tests - no such property: bootClasspath
我正在尝试为 Android 执行一个简单的测试用例,遵循刚刚宣布的单元测试支持 - http://tools.android.com/tech-docs/unit-testing-support
仔细阅读演练后,我正在尝试 运行 ./gradlew test
。
我收到此错误:
Execution failed for task ':app:compileDebugGroovy'.
> No such property: bootClasspath for class: com.android.build.gradle.AppPlugin
同时使用 com.android.tools.build:gradle:1.1.0-rc1
.
还有其他人卡在上面吗?
尝试升级到新版本(RC3)
dependencies {
classpath 'com.android.tools.build:gradle:1.1.0-rc3'
// ..
}
您也可以在此处 look 将当前设置与工作示例进行比较。
测试支持功能是实验性的。也就是说,您的问题可能没有快速解决方案,或者可能是错误。
但是,我会更深入地研究这个问题,阅读消息:
这一行 Execution failed for task ':app:compileDebugGroovy'.
提到了任务,所以我会去弄清楚该任务的作用。我想这是一项已交付的任务。错误是在该任务中缺少 属性 > No such property: bootClasspath for class: com.android.build.gradle.AppPlugin
所以也许尝试找到该任务并确保为 AppPlugin class.
设置了 bootClasspath 属性
问题是 Groovy Android Gradle 插件(让 Groovy 在 Android 上工作)不只是与 [=40 一起工作=] 插件版本 1.1.0-rcX
.
这里有一段非常有趣的代码,直接来自 groovyx.grooid.GroovyAndroidPlugin
,版本 0.3.5
(当前最新,这里是 source)
def getRuntimeJars(Project project, plugin) {
int index
switch (getAndroidPluginVersion(project)) {
case ~/0\.9\..*/:
index = 0
break
case ~/0\.10\..*/:
case ~/0\.11\..*/:
case ~/0\.12\..*/:
case ~/0\.13\..*/:
case ~/0\.14\..*/:
case ~/1\.0\..*/:
index = 1
break
default:
index = RUNTIMEJARS_COMPAT.size()-1
}
def fun = RUNTIMEJARS_COMPAT[index]
fun(plugin)
}
和RUNTIMEJARS_COMPAT
的定义:
private static List RUNTIMEJARS_COMPAT = [
{ it.runtimeJars },
{ it.bootClasspath }
]
所以 API 一定在 Android Gradle 在 0.9.x
和 0.10.0
之间发生了变化(是的,我知道 - 那些 Google开发者改变了那里的一切:[ )。那么让我们来看看在 Android 插件版本 1.0.0
:
中制作 class 的问题
> javap -cp [path to proper jar] com.android.build.gradle.AppPlugin:
public class com.android.build.gradle.AppPlugin extends com.android.build.gradle.BasePlugin implements org.gradle.api.Plugin<org.gradle.api.Project> {
...
public java.util.List super$getBootClasspath();
...
是啊!这是我们需要的方法(来自父 com.android.build.gradle.BasePlugin
class)。现在版本 1.1.0-rc3
中没有类似的内容。更何况,com.android.build.gradle.AppPlugin
的API已经完全改变了,不是简单的if(version)
就能解决的
我想在作者更新插件之前,没有机会让 Groovy Android Gradle 插件与单元测试一起工作(因为 1.1.0
)。
那就等着吧
我正在尝试为 Android 执行一个简单的测试用例,遵循刚刚宣布的单元测试支持 - http://tools.android.com/tech-docs/unit-testing-support
仔细阅读演练后,我正在尝试 运行 ./gradlew test
。
我收到此错误:
Execution failed for task ':app:compileDebugGroovy'.
> No such property: bootClasspath for class: com.android.build.gradle.AppPlugin
同时使用 com.android.tools.build:gradle:1.1.0-rc1
.
还有其他人卡在上面吗?
尝试升级到新版本(RC3)
dependencies {
classpath 'com.android.tools.build:gradle:1.1.0-rc3'
// ..
}
您也可以在此处 look 将当前设置与工作示例进行比较。
测试支持功能是实验性的。也就是说,您的问题可能没有快速解决方案,或者可能是错误。
但是,我会更深入地研究这个问题,阅读消息:
这一行 Execution failed for task ':app:compileDebugGroovy'.
提到了任务,所以我会去弄清楚该任务的作用。我想这是一项已交付的任务。错误是在该任务中缺少 属性 > No such property: bootClasspath for class: com.android.build.gradle.AppPlugin
所以也许尝试找到该任务并确保为 AppPlugin class.
设置了 bootClasspath 属性问题是 Groovy Android Gradle 插件(让 Groovy 在 Android 上工作)不只是与 [=40 一起工作=] 插件版本 1.1.0-rcX
.
这里有一段非常有趣的代码,直接来自 groovyx.grooid.GroovyAndroidPlugin
,版本 0.3.5
(当前最新,这里是 source)
def getRuntimeJars(Project project, plugin) {
int index
switch (getAndroidPluginVersion(project)) {
case ~/0\.9\..*/:
index = 0
break
case ~/0\.10\..*/:
case ~/0\.11\..*/:
case ~/0\.12\..*/:
case ~/0\.13\..*/:
case ~/0\.14\..*/:
case ~/1\.0\..*/:
index = 1
break
default:
index = RUNTIMEJARS_COMPAT.size()-1
}
def fun = RUNTIMEJARS_COMPAT[index]
fun(plugin)
}
和RUNTIMEJARS_COMPAT
的定义:
private static List RUNTIMEJARS_COMPAT = [
{ it.runtimeJars },
{ it.bootClasspath }
]
所以 API 一定在 Android Gradle 在 0.9.x
和 0.10.0
之间发生了变化(是的,我知道 - 那些 Google开发者改变了那里的一切:[ )。那么让我们来看看在 Android 插件版本 1.0.0
:
> javap -cp [path to proper jar] com.android.build.gradle.AppPlugin:
public class com.android.build.gradle.AppPlugin extends com.android.build.gradle.BasePlugin implements org.gradle.api.Plugin<org.gradle.api.Project> {
...
public java.util.List super$getBootClasspath();
...
是啊!这是我们需要的方法(来自父 com.android.build.gradle.BasePlugin
class)。现在版本 1.1.0-rc3
中没有类似的内容。更何况,com.android.build.gradle.AppPlugin
的API已经完全改变了,不是简单的if(version)
就能解决的
我想在作者更新插件之前,没有机会让 Groovy Android Gradle 插件与单元测试一起工作(因为 1.1.0
)。
那就等着吧