2017-07-19 148 views
0

我知道bazel并没有强加任何特定的文件结构,但是有一些文件夹命名约定,后面跟着使用Bazel的产品,其中一些(例如“third_party”)确实有特殊的处理方式(它需要指定licenses)。Bazel文件夹命名约定

所以我不太明白toolsthird_party之间的区别。例如,如果我想要一个“ruby toolchain”,它就是一个工具,因为它是语言解释器,但它也是第三方,因为它是由社区开发的。它应该去哪里?

bazel规则呢?应该在哪里放置地点?

回答

2

我是Bazel开发人员,我同意这里的使用可能会有点混乱。

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

另一方面,工具将用于编写作为独立程序帮助您的项目的代码。例如,如果您编写了一个将静态文本文件转换为代码的脚本(也许您可以将这些数据作为in-language常量访问),那么可以将其用于工具,因为它是独立的,但对您项目。 (作为说明,Bazel的工具目录与此有点不同:我们将它们打包并包含在Bazel二进制文件中,以便它们可以在运行时使用,而不是在构建时使用)。

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

+0

非常感谢你的明确解释。对于我,这说得通。为了更好地理解这一点,我检查了一些Google项目。既然我有幸找到了一位bazel开发人员,我是否可以快速要求任何现有解决方案来“忽略.runfiles”的“pkg_tar”?为了修改源代码,我在本地克隆了bazel,因为除了BT上的bug#671之外,我没有运气,但也许已经有了一个解决方案。否则,我要在那里打开一张票。 – CodeShining

+0

我不知道关于runfiles问题的事情。看起来问题#671正在发生,您可以查看请求#2687(https://github.com/bazelbuild/bazel/pull/2687)并查看是否让您开始。 –