试图弄清楚是否可以使用 Gradle 中其他项目中的任务。假设 ProjectB 是一个包含 src/main/groovy 的项目。MyTask,具有父项目A
在ProjectC的build.gradle中,也有父项目A:
buildscript {
dependencies{
project(':ProjectB')
}
}
这似乎是合法的,因为在“project(:'ProjectB')”中插入一个错别字很难奏效。同样失败的是引入了这一行:
import com.MyTask
项目引用在buildscript闭包中是否无效?还尝试将com.MyTask移动到buildSrc/src/main/groovy,获得了同样的成功。
对我有用的解决方案是制作“com.MyTask“在配置时和源代码中都可用。ProjectA(父级)将其添加到buildSrc/build.gradle的sourceSets中:
sourceSets{
main{
groovy{
srcDir 'ProjectB/src/main/groovy'
}
}
}
现在ProjectC和所有其他项目都可以使用MyTask。同时,它与ProjectB的最终jar捆绑在一起。
亚当·默多克(Adam Murdoch)、卢克·戴利(Luke Daley)和史蒂夫·埃伯索尔(Steve Ebersole)也对这一问题进行了深入讨论:http://gradle.1045684.n5.nabble.com/buildSrc-as-a-regular-project-td5677255.html
编辑:与独立项目相比,操纵父构建Src更聪明。这样IntelliJ就很幸运了。
来自 Gradle 文档 15.4。向任务添加依赖项:
示例15.13。添加对另一个项目任务的依赖关系
build.gradle
project('projectA') {
task taskX(dependsOn: ':projectB:taskY') << {
println 'taskX'
}
}
project('projectB') {
task taskY << {
println 'taskY'
}
}