Bazel 文件夹命名约定

Bazel folder naming convention

我知道 bazel 没有强加任何特定的文件结构,但是使用 Bazel 的产品遵循一些文件夹命名约定,其中一些(例如 "third_party")确实有特殊处理(它需要指定 licenses

所以我不太明白toolsthird_party的区别。例如,如果我想放一个 "ruby toolchain" 它是一个工具,因为它是语言解释器,但它也是一个 third_party,因为它是由社区开发的。它应该去哪里?

那 bazel 规则呢?应该放在哪里?

我是一名 Bazel 开发人员,我同意,这里的用法可能有点令人困惑。

通常,我们建议将 third_party 用于您要导入以用于项目的任何外部代码。例如,Bazel 本身有很多用于 Python 标志解析、Java 编译和许多其他东西的库。

另一方面,工具将用于您编写的代码,以作为独立程序帮助您的项目。例如,如果您编写了一个将静态文本文件转换为代码的脚本(也许这样您就可以将数据作为语言常量访问),我会说它可以进入工具,因为它是独立的,但对您的项目。

(请注意,Bazel 的工具目录与此略有不同:我们实际上将它们打包并包含在 Bazel 二进制文件中,以便它们可以在 运行 时使用,而不是在构建时使用时间)。

如果您正在编写自定义 Skylark 规则,您可以将其放在任何有意义的地方,但我想问一下,如果您认为它们可能在您的项目之外有用,请为它们创建一个单独的存储库,以便其他开发人员可以使用它们。使用专用存储库中的自定义规则要容易得多,因为您只需要在 WORKSPACE 中使用 http_archive() 规则来获取它们。如果它们与您的项目的其余部分混在一起,其他人就很难再使用。