Gradle Java插件中的compileJava任务是否取决于我创建的任何源集的compileSourceSetJava任务?还是我需要手动使用dependsOn来确保在运行compileJava?va`时所有源集都已编译?

最佳答案

我相信它不会自动依赖任何东西。如果您只是创建一个空的源集,那么就是-一组源。但是取决于您的用例,可能存在隐式依赖。考虑以下gradle脚本:

apply plugin: "java"

sourceSets {
    integrationTest {
        java {
            compileClasspath += main.output
            runtimeClasspath += main.output
        }
    }
}

configurations {
    integrationTestCompile.extendsFrom testCompile
    integrationTestRuntime.extendsFrom testRuntime
}

task integrationTest(type: Test) {
    testClassesDir = project.sourceSets.integrationTest.output.classesDir
    classpath = project.sourceSets.integrationTest.runtimeClasspath
}

由于integrationTest源集引用了main java源集,因此gradle会自动创建对compileJava(和processResources)的依赖项。

因此,答案是“取决于”(双关语不是故意的)。根据您如何定义源集和配置,可能存在隐式依赖性。但是,如果您没有在两个源集之间定义任何关系,则没有理由为什么它们会自动创建任何依赖关系。

顺便说一句,如果您想进一步探索的话,还有一个不错的gradle plugin for generating task graphs

09-26 08:23