我想从jar中提取一些特定的资源(然后将其下载为http存档的一部分),虽然我知道如何实现这一点,但我不知道什么是最轻巧和最少的方法为此。
我已经天真地尝试过(在阅读this答案之后)做类似的事情:
new_http_archive(
name="some_jar_contents",
url="@some_archive//:lib/some_jar.jar",
build_file_content="""
filegroup(
name = "srcs",
srcs = glob(["*"]),
visibility = ["//visibility:public"]
)
"""
)
但是,我可以预见的是java.net.MalformedURLException: no protocol:
答案 0 :(得分:2)
您遇到的问题是由于Bazel无法理解网址@some_archive//:lib/some_jar.jar
。
它无法推断用于获取Jar的协议,并且会引发异常。
规则new_http_archive
用于从某个远程位置获取压缩的存档,然后将其构建并公开为当前存储库的外部目标。
您需要将url
参数更改为实际URL,以便让Bazel使用您要提取的资源来获取Jar。
然后,在build_file_content
参数部分,使用genrule
移动所需的资源文件并导出。
可以找到一个有效的示例in this private gist。
该示例执行以下操作:
WORKSPACE
中获取AutoValue的罐子genrule
从Jar中提取autovalue.vm
文件autovalue.vm
的内容有用的资源: