我在文件夹buildSrc中有一些多项目构建的常见类定义:

root
 build.gradle
 settings.gradle
 a/
   build.gradle
 b/
   build.gradle
 buildSrc/
   common.gradle

哪里 settings.gradle

include ':a', ':b'

a/build.gradle

project(":a") {
    task someTask(type: CommonTask) {
        println "Running some task"
    }
}

buildSrc/common.gradle

class CommonTask extends DefaultTask {
    @TaskAction
    def someAction() {
        println "Running common task"
    }
}

根据文件:

https://docs.gradle.org/current/userguide/organizing_build_logic.html

buildSrc项目 . 将构建类的源代码放到某个目录中,Gradle会自动编译它们并将它们包含在构建脚本的类路径中 .

但是在运行 gradle build 时出现错误:

无法在项目':a'上找到属性'CommonTask' .

那么我们如何为多项目构建提供通用的类定义呢?

编辑

apply from: "$rootDir/buildSrc/common.gradle" 添加到 project a 没有帮助

Edit2

我把文件 common.gradle 改为 buildSrc/src/main/groovy/org/gradle/Common.groovy

并在根项目' build.gradle

repositories {
    mavenLocal()
}

dependencies {
    compile group: 'org.gradle'
}

评估根项目“root”时出现问题 . 无法在根项目“root”上找到参数[]的方法compile() .

编辑3

我有2个文件:

buildSrc/src/main/groovy/com/iggy/gradle/A.groovy

package com.iggy.gradle

String someA() {
    return "a"
}

buildSrc/src/main/groovy/com/iggy/gradle/B.groovy

package com.iggy.gradle

String someB() {
    String a = someA()
    return a
}

但是我收到一个错误: Could not find method someA()

不应该解决相同包中的方法吗?添加 @PackageScopepublic 没有帮助 . 那么如何从另一个groovy文件导入方法呢?