Как передать исполняемую оболочку, сгенерированную java_binary, в ctx.actions.run - PullRequest
0 голосов
/ 20 октября 2018

Я пытаюсь понять лучшие практики относительно java_binary.Итак, если у меня есть код что-то вроде:

java_binary(
  name = "my-runner",
  visibility = ["//visibility:public"],
  srcs = glob(["src/main/java/**/*.java"]),
  main_class = "my.awesome.package.MyRunner",
)

Когда я запускаю bazel build MyMainClass - все работает нормально - я вижу два сгенерированных файла - файл jar и скрипт-обертку.

Согласно официальной документации :

Использование сценария-оболочки предпочтительнее java -jar, поскольку он также передает флаги JVM и параметры для загрузки собственных библиотек.

И вот проблема, которую я не могу решить - как именно я должен получить доступ к этому скрипту-обёртке?

Я попробовал:

some_rule = rule(
    _some_rule_impl,
    attrs = {
        "_executable": attr.label(
           cfg = "host",
           executable = True,
           default=":my-runner"
        ),
        ...
    }
  )

и _some_rule_impl Я пытаюсь передать исполняемый файл в ctx.actions.run - и я получаю сообщение об ошибке, что атрибут должен создать один файл.

Когда я передаю my-runner_deploy_deploy.jarкак файл, который я могу передать в Java - все работает.Однако мне интересно, как передать упаковщик как исполняемый файл.

1 Ответ

0 голосов
/ 20 октября 2018

В действии запуска вы можете использовать executable = ctx.executable._executable.

Документация для ctx.actions.run дает этот пример https://github.com/bazelbuild/examples/blob/master/rules/actions_run/execute.bzl

Edit Я думаю, что есть некоторая путаница: :my-runner - это java_binary со сценарием-оберткой.

...