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。