Gradle 对不同项目源集的依赖

Ber*_*rne 5 java build gradle

我正在一个多项目系统中工作(有 40 多个子项目)。每个子项目都有自己的布局(大多数子项目遵循通用布局,但有些不同)。在我的子项目中,有这两个:

- testjunit
    - sourceSets
        - lptfExperimental
        - other source sets

- basicservices
    - sourceSets
        - testacceptance
        - other source sets
Run Code Online (Sandbox Code Playgroud)

我需要使源集basicservices-testacceptance依赖于源集的输出testjunit-lptfExperimental

我尝试这样做:

dependencies{
    testacceptanceCompile project(':testjunit').sourceSets.lptfExperimental.output
}
Run Code Online (Sandbox Code Playgroud)

dependencies{
    project.parent.subprojects.each{prj ->
    if(prj.name == "testjunit")
        testacceptanceCompile prj.sourceSets.findByName('lptfExperimental').output
}
Run Code Online (Sandbox Code Playgroud)

但在这两种情况下我都会收到以下错误:

失败:构建失败并出现异常。

其中:脚本'C:\Development\defaults.gradle'行:144

出了什么问题:评估脚本时出现问题。在 SourceSet 容器上找不到属性“lptfExperimental”。

defaults.gradle只是一个额外的信息:此依赖项在应用到build.gradle项目的名为的文件中声明basicservices

/defaults.gradle:

apply plugin: 'java'
apply plugin: 'eclipse'
...
sourceSets {
    ...
    // test acceptance
    testacceptance{

        java{
            srcDir 'test/acceptance/src/java'
        }

        resources {
            srcDir 'test/acceptance/src/java'
        }
    }
    ...
}

// default dependencies
dependencies{
    testacceptanceCompile project(':testjunit')
    testacceptanceCompile project(':testjunit').sourceSets.lptfExperimental.output
}
...
Run Code Online (Sandbox Code Playgroud)

/testjunit/build.gradle:

...
sourceSets{
    ...
    lptfExperimental{

    java {
        srcDir 'lptf-experimental/src/java'
    }

    resources {
        srcDir 'lptf-experimental/src/java'
    }
}
...
Run Code Online (Sandbox Code Playgroud)

/basicservices/build.gradle:

apply plugin: 'java'
apply plugin: 'eclipse'
apply from: '../defaults.gradle'

dependencies{
    ...
    compile project(':testjunit')
    ...
}
Run Code Online (Sandbox Code Playgroud)

Ber*_*rne 2

我可以用这个问题中提到的解决方案解决这个问题。基本上,我evaluationDependsOn(':testjunit')defaults.gradle. 它解决了问题。该指令的参考资料位于此处