gpt4 book ai didi

java - Bazel 相当于 Buck 的类路径

转载 作者:行者123 更新时间:2023-12-02 09:12:05 24 4
gpt4 key购买 nike

我正在尝试将项目从 Buck 迁移到 bazel,并寻找可用于 genrules 的 $(classpath) 宏的等效项。 bazel 中是否有类似的东西可以获取给定 java_library 的类路径的 jar 列表?

我能想到的最好办法是迭代依赖项列表并使用 $(execpath) 宏来获取相应的 jar:

jar_deps = []
for dep in deps: # deps are the same dependencies specified for the java_library
jar_deps.append("$(execpath %s)" % dep)

genrule(
name = "test-rule",
outs = ["test-rule.txt"],
deps = deps,
cmd = "echo \"%s\" > $@" % (":".join(jar_deps)),
)

有更好的方法吗?

最佳答案

看起来实现此目的的另一种方法是使用自定义规则访问 Java 规则的 JavaInfo 提供程序:

def _runtime_deps_providing_rule_impl(ctx):
return [
platform_common.TemplateVariableInfo({
"RUNTIME_DEPS": ":".join([f.path for f in ctx.attr.rule[JavaInfo].transitive_runtime_deps.to_list()]),
})
]

runtime_deps_providing_rule = rule(
implementation = _runtime_deps_providing_rule_impl,
attrs = {
"rule": attr.label(),
},
)

runtime_deps_providing_rule(
name = "test-providing-rule",
rule = ":test-java-rule",
)

genrule(
name = "test-rule",
outs = ["test-rule.txt"],
cmd = "echo \"$(RUNTIME_DEPS)\" > $@",
toolchains = [":test-providing-rule"],
)

这样做的优点是不需要显式传递依赖项列表。

关于java - Bazel 相当于 Buck 的类路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59325435/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com