多项目构建的gradle通用代码
对于文件夹buildSrc中的多项目生成,我有一些常见的类定义:多项目构建的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) {
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分钟了。顺便问一下,你知道它在哪里吗?