Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gradle buildscript中项目的渐变依赖关系_Gradle - Fatal编程技术网

Gradle buildscript中项目的渐变依赖关系

Gradle buildscript中项目的渐变依赖关系,gradle,Gradle,如果有可能使用Gradle中其他项目的任务,我会尽力想办法解决。假设ProjectB是一个src/main/groovy包含com.MyTask的项目,它有父ProjectA 在ProjectC中的build.gradle中,也有父ProjectA: buildscript { dependencies{ project(':ProjectB') } } 这似乎是合法的,因为在“project(:'ProjectB')中引入输入错误很难成功。同样失败的是引入这一

如果有可能使用Gradle中其他项目的任务,我会尽力想办法解决。假设ProjectB是一个src/main/groovy包含com.MyTask的项目,它有父ProjectA

在ProjectC中的build.gradle中,也有父ProjectA:

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开心的方法。