Bazel-云雀动作可以读取命令行标志吗(strict_java_deps)

Bazel- can a skylark action read a command-line flag (strict_java_deps)

我正在为 rules_scala.
实现类似 Strict Java Deps 的功能 如果使用 warnerror,我真的很想能够在运行时进行配置。

我记得 skylark 规则无法创建和访问命令行标志,但我不记得它们是否可以访问现有的?

主要区别在于现有的已经被解析,所以它们可能也会在一些 ctx 中传递。

您想要的标志 (strict_java_deps) 目前无法通过 Skylark 获得。不过,我们没有理由不添加它,已提交 #3295 进行跟踪。

对于其他标志,上下文可以访问配置片段,这些片段可以访问一些已解析的命令行标志。我想你想要的是 ctx.fragments, then use the fragments to get the java fragments,然后从中得到 default_javac_flags:

# rules.bzl
def _impl(ctx):
  print("flags: %s" % ctx.fragments.java.default_javac_flags)
  ...

frag = rule(
    implementation = _impl,
    fragments = ["java"],  # Declare that this rule uses java fragments
)

然后:

$ bazel build --javacopt="-g:source,lines" :x
WARNING: /home/kchodorow/test/a/tester.bzl:2:3: flags: ["-g:source,lines"].