Bazel存储库规则-在存储库_ctx.execute中下载文件

Bazel存储库规则-在存储库_ctx.execute中下载文件,bazel,Bazel,我有一个java测试,我正在尝试沙箱,它有点复杂的下载逻辑。 我正在考虑编写一个存储库规则,它将使用repository\u ctx启动一个java应用程序。执行来运行这个逻辑,而不是在skylark中复制它 我应该如何获取此通话的内容? 我可以向java应用程序传递一个路径/文件名,以便将文件下载到其中,但我不确定该给它什么路径。我可以让它将字节打印到stdout,并通过exec_结果收集它们(听起来很可怕)。您可以使用返回a来获取相对于生成的工作区的路径,然后使用路径。realpath您可以

我有一个java测试,我正在尝试沙箱,它有点复杂的下载逻辑。
我正在考虑编写一个存储库规则,它将使用
repository\u ctx启动一个java应用程序。执行
来运行这个逻辑,而不是在skylark中复制它

我应该如何获取此通话的内容?
我可以向java应用程序传递一个路径/文件名,以便将文件下载到其中,但我不确定该给它什么路径。我可以让它将字节打印到stdout,并通过exec_结果收集它们(听起来很可怕)。

您可以使用返回a来获取相对于生成的工作区的路径,然后使用
路径。realpath
您可以获取输出的规范名称


收集exec_结果的输出以用作文件输入应该可以工作,但据我所知从未尝试过,因此可能会出现奇怪的编码问题。

这可能是一个不存在的路径,对吗?如果我执行repo_ctx.path(“downloads/MySQL.installer”)并要求工具下载,它会是规则的输出吗?最后一部分是目录是否可以作为输出?谢谢我不明白“这会是规则的输出吗?”这个问题。这可能是一条不存在的路径,因此工具必须创建它。NM。我意识到我创建的构建文件应该为目录声明一个文件组,这将使其成为规则的输出。谢谢