Bazel-云雀动作可以读取命令行标志吗(strict_java_deps)
Bazel- can a skylark action read a command-line flag (strict_java_deps)
我正在为 rules_scala.
实现类似 Strict Java Deps
的功能
如果使用 warn
或 error
,我真的很想能够在运行时进行配置。
我记得 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"].
我正在为 rules_scala.
实现类似 Strict Java Deps
的功能
如果使用 warn
或 error
,我真的很想能够在运行时进行配置。
我记得 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"].