SourceSet.compiledBy 实际上做了什么?



当你有这样的块时:

sourceSets {
main {
java {
srcDir 'spec/src'
srcDir 'shared/src'
srcDir 'server/src'
}
resources {
srcDir 'spec/src'
srcDir 'shared/src'
srcDir 'server/src'
}
compiledBy 'wsGen'
}
}

compiledBy完成什么?它只是为了缓存/性能吗?它是否会导致任务作为compileJava任务的一部分运行?API 文档说它

注册一组任务,这些任务负责将此源代码集编译到类目录中。路径按照Task.dependsOn(java.lang.Object[])进行评估。

这很好,但我有一个 Gradle 项目,当它不在dependsOn列表中时,它似乎正在运行wsGen任务。compiledBy这是从哪里来的吗?

我不是试图用这个问题解决问题,而只是试图理解这个函数的机制。

是的,这就是它的来源,但不,这与compileJava任务没有直接关系。实际上,compiledBy选项设置表示源集输出的ConfigurableFileCollectionbuiltBy选项。JavaBasePlugin添加的classes任务取决于compileJava任务、processResources任务和所述ConfigurableFileCollection,这反过来又会导致任务被执行,因为它是classes任务的隐式传递依赖项。

最新更新