Я использую процессор аннотаций для генерации языковых привязок из интерфейсов, определенных в Java. Я хочу заменить действия, созданные с помощью ctx.actions.run
, действиями, сгенерированными с помощью java_common.compile
, чтобы я мог использовать встроенную поддержку Базеля для постоянных javac рабочих.
Вот макет оригинальной работает Реализация правила Базеля с использованием ctx.actions.run
:
def _impl(ctx):
output_dir = ctx.actions.declare_directory(output)
args = ctx.actions.args()
args.add(output_dir.path, format = "-AoutputDir=%s")
ctx.actions.run(
...,
outputs = [output_dir],
arguments = [args],
)
return DefaultInfo(files = depset([output_dir]))
Теперь я хотел бы поменять ctx.actions.run
с java_common.compile
. Вот макет того, что я придумал:
def _impl(ctx):
output_dir = ctx.actions.declare_directory(output)
java_common.compile(
...
output = ctx.label.name + "-placeholder.jar", # -proc:only
javac_opts = [
"-proc:only",
"-AoutputDir={}".format(output_dir.path),
],
plugins = [ctx.attr._emitter[JavaInfo]],
annotation_processor_additional_outputs = [output_dir],
)
return DefaultInfo(files = depset([output_dir]))
Вот моя проблема: после построения моей цели, output_dir
создается, но пусто. Я могу найти свои файлы в выводе Базеля root, запустив find -L bazel-out -name uniqueOutputDir
, но они похоронены под bazel-out/darwin-fastbuild/bin/my_packages/_javac/my_target/my_target-placeholder_sourcegenfiles/uniqueOutputDir
, а затем свернуты в bazel-bin/my_package/my_target-placeholder-gensrc.jar
.
Есть идеи? Мол, как annotation_processor_additional_outputs
должен работать? Как я могу указать через javac_opts
запись непосредственно в output_dir.path
без префикса ...sourcegenfiles
?
Спасибо!