如何在不同的子项目中使用相同的文件组定义
How to use same filegroup definition in different subprojects
我需要为一些子项目声明特定的资源,我正在按照
的方式进行
filegroup(
name = "some_resources",
visibility = ["//:app"],
srcs = glob([
"src/my/resources/**/*.resources",
]),
)
但是在任何一个子项目中,找到资源的路径都是一样的。我的问题是 - 在这种特殊情况下,什么是最 bazelian(bazelish?)的方法来最小化代码重复?
基本上我想要类似的东西
expose_some_resources() 在相关的子项目中。
然后让每个应用程序都可以看到此资源。
您可以将文件组放入 .bzl
文件中的宏中,然后在相关子项目中加载和 运行 该宏。
类似:
workspace/resources.bzl
:
def expose_some_resources():
native.filegroup(
name = "some_resources",
visibility = ["//:app"],
srcs = native.glob([
"src/my/resources/**/*.resources",
]),
)
workspace/subproject/BUILD
:
load("//:resources.bzl", "expose_some_resources")
expose_some_resources()
您还可以考虑向宏添加一些错误检查,例如使用 native.existing_rule 检查每个包是否只调用一次宏,或者检查 glob returns 1 个或多个文件。
我需要为一些子项目声明特定的资源,我正在按照
的方式进行filegroup(
name = "some_resources",
visibility = ["//:app"],
srcs = glob([
"src/my/resources/**/*.resources",
]),
)
但是在任何一个子项目中,找到资源的路径都是一样的。我的问题是 - 在这种特殊情况下,什么是最 bazelian(bazelish?)的方法来最小化代码重复?
基本上我想要类似的东西 expose_some_resources() 在相关的子项目中。
然后让每个应用程序都可以看到此资源。
您可以将文件组放入 .bzl
文件中的宏中,然后在相关子项目中加载和 运行 该宏。
类似:
workspace/resources.bzl
:
def expose_some_resources():
native.filegroup(
name = "some_resources",
visibility = ["//:app"],
srcs = native.glob([
"src/my/resources/**/*.resources",
]),
)
workspace/subproject/BUILD
:
load("//:resources.bzl", "expose_some_resources")
expose_some_resources()
您还可以考虑向宏添加一些错误检查,例如使用 native.existing_rule 检查每个包是否只调用一次宏,或者检查 glob returns 1 个或多个文件。