【问题标题】:Unable to load class for Custom Gradle plugin in android studio无法在 android studio 中加载自定义 Gradle 插件的类
【发布时间】:2016-09-21 02:08:09
【问题描述】:

我正在尝试创建一个可以在 gradle.build 文件中应用的自定义插件。有几种方法可以做到这一点,但我使用的是 buildSrc 文件夹。这意味着该插件将绑定到我的构建而不是可移植的。 来自docs 的buildSrc 文件夹应具有以下属性:

buildSrc 项目 您可以将任务类的源代码放在 rootProjectDir/buildSrc/src/main/groovy 目录中。 Gradle 将负责编译和测试任务类,并使其在构建脚本的类路径中可用。任务类对构建使用的每个构建脚本都是可见的。但是,它在构建之外是不可见的,因此您不能在定义它的构建之外重用任务类。使用 buildSrc 项目方法将任务声明 - 即任务应该做什么 - 与任务实现分开 -也就是任务是怎么做的。

但无论如何我的问题如下:

我已经在根项目路径中创建了一个 buildSrc 目录,并创建了一个 IDE 识别的 groovy 文件夹。

下面是我的折叠结构和我得到的错误:

现在是任务和插件本身:

重命名AppVersionNameTask.groovy:

    package com.myplugins
import org.gradle.api.DefaultTask
import org.gradle.api.tasks.TaskAction

class RenameAppVersionNameTask extends DefaultTask {

    @TaskAction
    def run() {
        project.configure(project) {
            // Check if plugin works on an Android module
            if (it.hasProperty("android")) {
                // Iterate over app build variants (build types + flavors)
                project.android.applicationVariants.all { variant ->
                    // Only change debug build type variants
                    if (variant.buildType.name == project.android.buildTypes.debug.name) {
                        // Rename versionName
                        def customVersionName = variant.mergedFlavor.versionName
                        variant.mergedFlavor.versionName = customVersionName + " custom"
                    }
                }
            }
        }
    }

    RenameAppVersionNameTask() {
        group = 'customPlugin'
        description = 'Renames versionName of the app depends on the current git branch name'

    }
}

CustomPlugin.groovy:

    package com.myplugins
import org.gradle.api.Plugin
import org.gradle.api.Project

class CustomPlugin implements Plugin<Project> {

    @Override
    void apply(Project project) {
        project.task('renameAppVersionName', type: RenameAppVersionNameTask)
        project.tasks.getByName('preBuild').dependsOn('renameAppVersionName')
    }

}

我在 gradle 同步时收到的错误是:

Failed to sync Gradle project 'My GradlePluginApplication'
Error:Unable to load class 'CustomPlugin'.
Possible causes for this unexpected error include:<ul><li>Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)
<a href="syncProject">Re-download dependencies and sync project (requires network)</a></li><li>The state of a Gradle build process (daemon) may be corrupt. Stopping all Gradle daemons may solve this problem.
<a href="stopGradleDaemons">Stop Gradle build processes (requires restart)</a></li><li>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.</li></ul>In the case of corrupt Gradle processes, you can also try closing the IDE and then killing all Java processes.

我还注意到我什至无法应用插件:

我确认 android studio 正在使用 gradle 包装器。 如果需要的话,gradle-wrapper.properties 如下:

distributionBase=GRADLE_USER_HOME 分布路径=包装/分布 zipStoreBase=GRADLE_USER_HOME zipStorePath=包装器/dists distributionUrl=https://services.gradle.org/distributions/gradle-2.10-all.zip

【问题讨论】:

    标签: android gradle android-gradle-plugin


    【解决方案1】:

    您似乎缺少位于buildSrc 目录中的build.gradle 文件。这将告诉buildSrc 项目要使用哪些插件以及要引入哪些依赖项。

    看起来和这个类似

    apply plugin: 'groovy'
    
    repositories {
      jcenter()
    }
    
    dependencies {
      compile localGroovy()
      compile gradleApi()
    }
    

    并将位于buildSrc 的根目录中

    我也不确定您是否需要创建自定义插件,而是可以在项目的 gradle 文件中使用您的任务。

    【讨论】:

    • 我正在关注一个演示。这就是我以这种方式建造它的原因。显然,只需一项任务即可完成。我没有意识到我需要一个 build.gradle 文件。这解决了我的问题。谢谢。
    • 在我的情况下,我丢失了“jcenter()”存储库,只有“mavenCentral”,thx 要求我添加 jcenter。(当然这是在 buildSrc 目录中的 build.gradle 中)
    猜你喜欢
    • 2021-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-11
    • 1970-01-01
    • 2013-07-15
    相关资源
    最近更新 更多