【问题标题】:How to extract resources from jar in bazel如何从bazel中的jar中提取资源
【发布时间】:2021-01-19 05:34:28
【问题描述】:

我的项目中有不同的模块,它们将配置文件生成为 JSON,它们是 java_libarary 的一部分。我需要使用 bazel 构建将此生成的 JSON 文件复制到新模块。我正在考虑算法来做到这一点:

  1. 从 bazel 读取所有依赖项(假设所有模块 generate json 将被添加为依赖项)。
  2. 在依赖关系中逐个提取 JAR 文件
  3. 将 json 复制到新位置
  4. 包将 json 复制到新的 tar 作为输出

我不确定,我如何在 bazel 中做到这一点,如果有人有类似的示例,请告诉我。

在此先感谢...

【问题讨论】:

    标签: bazel bazel-java


    【解决方案1】:

    我正在使用 genrule 来实现与:

    在 java_library BUILD 文件中

    genrule(
        name = "core-search-registry-gen-rule",
        srcs = [
            ":core-alarm",
        ],
        outs = ["search-registry.zip"],
        cmd = """
        mkdir -p $(@D)/search_registry && \
        $(JAVABASE)/bin/jar xf $(location :core-alarm)  && \
        for x in `find . -type f -name "*_registry.json"`; \
            do cp $$x $(@D)/search_registry/; done && \
        (cd $(@D) && zip -rq search-registry.zip search_registry/)
        """,
        message = "Concatenation of all json files one zip file",
        toolchains = [
            "@bazel_tools//tools/jdk:current_java_runtime",
        ],
        visibility = ["//mp:__subpackages__"],
    )
    

    在打包BUILD文件中:

    pkg_tar(
        name = "etc-search-registry",
        files = [
            "//mp/alarms/core:core-search-registry-gen-rule",
        ],
        mode = "0644",
        package_dir = "/etc/conf",
    )
    

    谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-21
      • 2011-04-19
      • 1970-01-01
      • 2015-04-02
      • 2013-12-08
      • 2022-01-20
      • 1970-01-01
      相关资源
      最近更新 更多