Gradle buildscript中项目的渐变依赖关系
如果有可能使用Gradle中其他项目的任务,我会尽力想办法解决。假设ProjectB是一个src/main/groovy包含com.MyTask的项目,它有父ProjectA 在ProjectC中的build.gradle中,也有父ProjectA:Gradle buildscript中项目的渐变依赖关系,gradle,Gradle,如果有可能使用Gradle中其他项目的任务,我会尽力想办法解决。假设ProjectB是一个src/main/groovy包含com.MyTask的项目,它有父ProjectA 在ProjectC中的build.gradle中,也有父ProjectA: buildscript { dependencies{ project(':ProjectB') } } 这似乎是合法的,因为在“project(:'ProjectB')中引入输入错误很难成功。同样失败的是引入这一
buildscript {
dependencies{
project(':ProjectB')
}
}
这似乎是合法的,因为在“project(:'ProjectB')中引入输入错误很难成功。同样失败的是引入这一行:
import com.MyTask
项目引用在buildscript闭包中无效吗?还尝试将com.MyTask移动到buildSrc/src/main/groovy,获得了同样的成功 来自Gradle文档:
例15.13。添加对来自另一个项目的任务的依赖关系
build.gradle
project('projectA') {
task taskX(dependsOn: ':projectB:taskY') << {
println 'taskX'
}
}
project('projectB') {
task taskY << {
println 'taskY'
}
}
build.gradle
项目(“项目A”){
task taskX(dependsOn:':projectB:taskY')对我有效的解决方案是使“com.MyTask”在配置时和源代码中都可用。
ProjectA(父级)将此添加到buildSrc/build.gradle的源集中:
sourceSets{
main{
groovy{
srcDir 'ProjectB/src/main/groovy'
}
}
}
现在ProjectC和所有其他项目都可以使用MyTask,同时它与ProjectB的最终jar捆绑在一起
亚当·默多克(Adam Murdoch)、卢克·戴利(Luke Daley)和史蒂夫·埃伯索尔(Steve Ebersole)也对这一问题进行了深入讨论:
编辑:操纵父buildSrc比独立项目更聪明。这样IntelliJ就很幸运了。很好!但我可能没有把问题说得足够清楚。我想使用的不是定义好的任务,而是在类路径上创建的任务。例如,将ProjectC导出到mavenLocal()在buildscript中的ProjectB中导入它很好。然后MyTask就可以使用了。还试图在ProjectC中定义一个“MyTask”,并依赖于ProjectB中的“MyTask”,但我无法定义,因为“MyTask”在src/main/gradle中,而不是在buildSrc/src/main/gradle中。@OleChristianLangfjæran你看过ch 15.2了吗?你试过tasks.getByPath吗(“我的任务”)
这又是一个很好的提示,但不起作用。原因是,由于我正在构建一个包含任务的独立项目,因此任务在配置时不可用。解决方案是编辑独立项目源集。后来发现,Adam Murdoch、Luke Daley和Steve Ebersole已对该问题进行了深入讨论:“IntelliJ不喜欢它”哈哈,不,我打赌它不喜欢。哈哈!很抱歉在你评论@mike rylander时编辑了答案!谢谢你想出了让IntelliJ开心的方法。