提问者:小点点

渐变对buildscript中项目的依赖性


试图弄清楚是否可以使用 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,获得了同样的成功。


共2个答案

匿名用户

对我有用的解决方案是制作“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'
    }
}