当前位置: 首页 > 知识库问答 >
问题:

无法在android studio中为自定义Gradle插件加载类

公冶浩慨
2023-03-14

我正在尝试创建一个自定义插件,我可以在gradle.build文件中应用它。有几种方法可以做到这一点,但我使用buildSrc文件夹来做到这一点。这意味着插件将绑定到我的构建,不可移植。从文档中,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'

    }
}

自定义插件。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 sync上收到的错误是:

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包装器。属性如下:

distributionBase=GRADLE\u USER\u HOME distributionPath=wrapper/dists zipStoreBase=GRADLE\u USER\u HOME zipStorePath=wrapper/distributionUrl=https://services.gradle.org/distributions/gradle-2.10-all.zip

共有1个答案

狄溪叠
2023-03-14

看起来您缺少构建。位于buildSrc目录中的gradle文件。这将告诉buildSrc项目要使用哪些插件以及要引入哪些依赖项。

看起来像这样

apply plugin: 'groovy'

repositories {
  jcenter()
}

dependencies {
  compile localGroovy()
  compile gradleApi()
}

并将位于buildSrc的根目录中

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

 类似资料:
  • 对于maven,我可以很容易地添加我的自定义实现com.my.generator:customgenerator:1.0-snapshot in plugin dependency block, 但在gradle我不知道怎么做

  • 我正在尝试创建一个自定义任务/插件(两者都拒绝工作),用于我的gradle构建脚本。 我正在使用groovy插件,希望在单独的文件中声明任务/插件,而不是在我的构建中。格拉德尔。 我的项目树如下所示: 我试图做的是在中创建我的任务/插件类,然后在。 让我举一个小例子。 TestTask。groovy: build.gradle 当我尝试使用我的gradle.build(清洁,构建等)做任何事情时,

  • 我在Project中创建了一个简单的gradle插件。根据文档,它应该是好的,但当我尝试使用它时,我发现id为'show-date-plugin'的文档我指的是:https://docs.gradle.org/current/userguide/custom_plugins.html 您可以将插件的源代码放在rootprojectdir/buildsrc/src/main/groovy目录中。Gr

  • 我为gradle创建了一个简单的基于groovy的插件。 在我的毕业典礼上。构建文件我有以下内容: 一切都很好,我得到了一个构建目录和一个. jar在lib文件夹中生成,我想这是独立的插件。 现在我想知道如何将这个新插件注册到我的gradle安装中,这样我就可以应用插件了:“myPlugin”我做了以下工作: 将插件放入安装中的插件文件夹 创建了myplugin.properties文件并将其包含

  • 问题内容: 我的公司最近写了gradle插件来进行原始配置(存储库,项目间的通用依赖关系等)。总体而言,这大大简化了我们的构建过程,并发现了项目之间的一些不一致之处。我们最近尝试向插件添加任务,但该任务无法正常工作。 这是坏掉的插件: 除了之外,此插件都很好用。当我将其添加到混合中(并编译/部署到我们的本地仓库)时,当我尝试构建使用插件的项目时出现此错误: 问题答案: 在脚本中定义任务时,将调用方

  • 在另一个项目中,我使用/应用这个插件: 但是如何从MyGradlePlugin.groovy中的apply方法中迭代公共依赖项并打印它们的坐标(artifactId、groupId、version)?