gradle依赖于在buildscript中的项目

jud*_*ole 9 gradle

如果可以使用Gradle中其他项目的任务,请尝试解决问题.假设ProjectB是一个包含com.MyTask的src/main/groovy的项目,具有父ProjectA

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

buildscript {
    dependencies{
        project(':ProjectB')
    }
}
Run Code Online (Sandbox Code Playgroud)

这似乎是合法的,因为在"项目(:'ProjectB')中引入拼写错误"很难.同样失败的是引入这条线:

import com.MyTask
Run Code Online (Sandbox Code Playgroud)

项目引用在buildscript闭包中无效吗?还尝试将com.MyTask移动到buildSrc/src/main/groovy并获得相同的成功.

jud*_*ole 5

对我有用的解决方案是使“com.MyTask”在配置时和源代码中都可用。ProjectA(父项)将其添加到 buildSrc/build.gradle 的 sourceSets 中:

sourceSets{
    main{
        groovy{
            srcDir 'ProjectB/src/main/groovy'
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在 ProjectC 和所有其他项目都可以使用 MyTask。同时它与 ProjectB 的最终 jar 捆绑在一起。

Adam Murdoch、Luke Daley 和 Steve Ebersole 也对这个问题进行了深入讨论:http : //gradle.1045684.n5.nabble.com/buildSrc-as-a-regular-project-td5677255.html

编辑:操作父 buildSrc 比独立项目更智能。这样 IntelliJ 就很开心了。