我在文件夹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()
不应该解决相同包中的方法吗?添加 @PackageScope
或 public
没有帮助 . 那么如何从另一个groovy文件导入方法呢?