我正在尝试创建一个自定义插件,我可以在gradle.build文件中应用它。有几种方法可以做到这一点,但我正在使用buildSrc文件夹。这意味着该插件将绑定到我的构建而不是可移植的。 从docs 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'
}
}
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 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-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
答案 0 :(得分:3)
您好像缺少build.gradle
目录中的buildSrc
文件。这将告诉buildSrc
项目要使用哪些插件以及要引入哪些依赖项。
它看起来与此类似
apply plugin: 'groovy'
repositories {
jcenter()
}
dependencies {
compile localGroovy()
compile gradleApi()
}
并将生活在buildSrc
我也不确定您是否需要创建自定义插件,而是可以在项目的gradle文件中使用您的任务。