多项目构建的gradle通用代码

多项目构建的gradle通用代码,gradle,Gradle,对于文件夹buildSrc中的多项目生成,我有一些常见的类定义: root build.gradle settings.gradle a/ build.gradle b/ build.gradle buildSrc/ common.gradle 在哪里 设置。gradle说 include ':a', ':b' a/build.gradle project(":a") { task someTask(type: CommonTask) {

对于文件夹buildSrc中的多项目生成,我有一些常见的类定义:

root
 build.gradle
 settings.gradle
 a/
   build.gradle
 b/
   build.gradle
 buildSrc/
   common.gradle
在哪里 设置。gradle

include ':a', ':b'
a/build.gradle

project(":a") {
    task someTask(type: CommonTask) {
        println "Running some task"
    }
}
class CommonTask extends DefaultTask {
    @TaskAction
    def someAction() {
        println "Running common task"
    }
}
buildSrc/common.gradle

project(":a") {
    task someTask(type: CommonTask) {
        println "Running some task"
    }
}
class CommonTask extends DefaultTask {
    @TaskAction
    def someAction() {
        println "Running common task"
    }
}
根据文件:

buildSrc项目。将构建类的源代码放到 某些目录和Gradle会自动编译它们并包括 将它们放在构建脚本的类路径中

但是,当运行
gradle build
时,我得到一个错误:

在项目:a上找不到属性“CommonTask”

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

编辑 将
应用程序从“$rootDir/buildSrc/common.gradle”
添加到
项目a
没有帮助

编辑2 我将文件
common.gradle
放入
buildSrc/src/main/groovy/org/gradle/common.groovy

在根项目中,
build.gradle

repositories {
    mavenLocal()
}

dependencies {
    compile group: 'org.gradle'
}
评估根项目“root”时出现问题。 在根项目“root”上找不到参数[{group=org.gradle}]的compile()方法

编辑3 我有两个文件:

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

package com.iggy.gradle

String someA() {
    return "a"
}
package com.iggy.gradle

String someB() {
    String a = someA()
    return a
}
buildSrc/src/main/groovy/com/iggy/gradle/B.groovy

package com.iggy.gradle

String someA() {
    return "a"
}
package com.iggy.gradle

String someB() {
    String a = someA()
    return a
}
但是我得到一个错误:
找不到方法someA()


不应该解析来自同一个包的方法吗?添加
@PackageScope
public
没有帮助。那么,如何从另一个groovy文件导入方法呢

Groovy类应该在包下的.Groovy文件中定义。不在common.gradle文件中。buildSrc的结构必须是groovy项目的结构:src/main/groovy下的源文件。@jbnize谢谢,请您对第二次编辑发表意见好吗?我需要它吗?子项目如何访问这些代码?您不应该将自己的类放在org.gradle中。把它们放在org.igy之类的网站上。只需在build.gradle文件中导入需要使用该类的org.iggy.CommonTask。您不需要在org.gradle上添加依赖项。@jbnite这种方法的问题是,这样我就必须知道导入org.gradle.api.DefaultTask等包的导入路径。我正在试图找到
exec
方法已经包含了10分钟了。顺便问一下,你知道它在哪里吗?