Gradle SourceSet.compiledBy实际上做什么?

Gradle SourceSet.compiledBy实际上做什么?,gradle,Gradle,当你有这样一个区块: sourceSets { main { java { srcDir 'spec/src' srcDir 'shared/src' srcDir 'server/src' } resources { srcDir 'spec/src' srcDir 'shared/src' srcDir 'server/src' } compiledBy 'wsGen' }

当你有这样一个区块:

sourceSets {
  main {
    java {
      srcDir 'spec/src'
      srcDir 'shared/src'
      srcDir 'server/src'
    }
    resources {
      srcDir 'spec/src'
      srcDir 'shared/src'
      srcDir 'server/src'
    }
    compiledBy 'wsGen'
  }
}
由编译的
实现了什么?它只是为了缓存/性能吗?它是否导致任务作为
compileJava
任务的一部分运行?API文档说它

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

这很好,但是我有一个Gradle项目,它似乎正在运行
wsGen
任务,而它不在
dependsOn
列表中。
是由
从哪里编译的


与其说我想解决这个问题,不如说我只是想理解这个函数的机制。

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

好的。因此,为了确保我理解:
compiledBy
是一个通用配置项,它可能会影响由其他插件(如Java插件)生成的任务层次结构,导致指定的
compiledBy
任务作为
compileJava
的间接依赖项运行?不,正如我已经说过的,它与
compileJava
任务没有任何关联。在Gradle中,您可以告诉
ConfigurableFileCollections
(顾名思义是一个文件集合)哪些Gradle任务创建了构成文件集合内容的文件。如果文件集合在某个地方使用,则需要运行以创建包含的文件的任务将自动执行。
classes
任务取决于源集的输出文件集合,因此,如果执行
classes
任务,则会执行该任务。