-
在 Android 开发中,创建了 buildSrc 模块,并创建了自定义插件,构建时,出现了如下错误信息
class org.gradle.api.internal.project.DefaultProject_Decorated cannot be cast to class org.apache.tools.ant.Project (org.gradle.api.internal.project.DefaultProject_Decorated is in unnamed module of loader org.gradle.internal.classloader.VisitableURLClassLoader @26aa12dd; org.apache.tools.ant.Project is in unnamed module of loader org.gradle.internal.classloader.VisitableURLClassLoader @131276c2)
class org.gradle.api.internal.project.DefaultProject_Decorated cannot be cast to class org.apache.tools.ant.Project (org.gradle.api.internal.project.DefaultProject_Decorated is in unnamed module of loader org.gradle.internal.classloader.VisitableURLClassLoader @26aa12dd; org.apache.tools.ant.Project is in unnamed module of loader org.gradle.internal.classloader.VisitableURLClassLoader @131276c2)Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)
Re-download dependencies and sync project (requires network)
The state of a Gradle build process (daemon) may be corrupt. Stopping all Gradle daemons may solve this problem.Stop Gradle build processes (requires restart)
Your project may be using a third-party plugin which is not compatible with the other plugins in the project or the version of Gradle requested by the project.In the case of corrupt Gradle processes, you can also try closing the IDE and then killing all Java processes.
问题原因
-
这是一个类加载器冲突问题,Gradle 的类 DefaultProject 被错误地尝试转换成 Apache Ant 的 Project 类
-
这通常是由于构建脚本中使用了错误的导入语句导致的
这两个类虽然都叫 Project,但来自完全不同的包
-
Gradle Project: org.gradle.api.Project
-
Ant Project: org.apache.tools.ant.Project
-
处理策略
- 将导入的 Ant 的 Project 修改为 Gradle 的 Project
groovy
// 原来是这样
import org.apache.tools.ant.Project
groovy
// 修改为这样
import org.gradle.api.Project