无法在Android Studio中加载Custom Gradle插件的类

j2e*_*nue 0 android gradle android-gradle-plugin

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

buildSrc项目您可以将任务类的源代码放在rootProjectDir / buildSrc / src / main / groovy目录中。Gradle将负责编译和测试任务类,并使其在构建脚本的类路径中可用。任务类对于构建所使用的每个构建脚本都是可见的。但是,它在构建外部不可见,因此您不能在定义该构建的外部重用任务类。使用buildSrc项目方法将任务声明(即任务应执行的操作)与任务实现分开。也就是说,任务是如何完成的。

但是无论如何,我的问题在下面:

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

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

在此处输入图片说明

现在,这里是任务和插件本身:

RenameAppVersionNameTask.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'

    }
}
Run Code Online (Sandbox Code Playgroud)

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')
    }

}
Run Code Online (Sandbox Code Playgroud)

我在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.
Run Code Online (Sandbox Code Playgroud)

我也注意到我什至不能应用该插件:

在此处输入图片说明

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

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

Pie*_*ces 5

似乎您丢失build.gradlebuildSrc目录内的文件。这将告诉buildSrc项目使用哪些插件以及引入哪些依赖项。

看起来与此类似

apply plugin: 'groovy'

repositories {
  jcenter()
}

dependencies {
  compile localGroovy()
  compile gradleApi()
}
Run Code Online (Sandbox Code Playgroud)

并将生活在 buildSrc

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