在gradle中,将buildSrc文件用作顶层的目的是什么,而不是仅使用典型的Java项目布局(src / main / java)?

如果我有一个布局

src
   main
      java

要么
buildSrc
    src
       main
          java

有什么区别(或这样做的原因)?在多模块项目中是否更有用?即使对于多模块项目,我也不能做类似的事情
proj1
  src


proj2
  src

然后只有一个顶级build.gradle(与proj1proj2处于同一级别),它定义了项目中的通用设置?

最佳答案

buildSrc是一个单独的构建,其目的是构建打算在主构建的构建脚本中使用的任何任务,插件或其他类,但不必在各个构建之间共享。(*)可以将此类构建为主要构建的一部分,因为它们必须在主要构建的构建脚本甚至可以被编译/评估之前就存在,并且Gradle在完成任何工作之前对其进行编译/评估(配置与执行阶段) )。

与将所有构建代码放入构建脚本相比,buildSrc为您提供了一种开发常规代码的方式,就像可以测试的类,可以导入到IDE等的常规代码一样。这是保持构建脚本简单甚至干的一种方法对于更复杂的构建。
buildSrc在多项目构建中更常见,原因仅在于较大的构建更可能实现自己的自定义任务和插件。

随着时间的流逝,buildSrc将发展为更通用的功能,可以在单个Gradle调用中执行多个相关的构建。

(*)可以跨构建共享类,但涉及更多。特别是,您需要将这些类发布到存储库,并且使用构建时必须从那里显式导入它们,类似于在构建之间共享生产库时。

10-08 04:12