如何在外部软件包Workspace_file中解析依赖关系



尝试从通过http_archive导入的外部软件包中使用build_file中的目标,该软件包通过workspace_file属性失败在外部包装工作空间中定义的依赖项。我在Debian测试中使用Bazel 0.27.0。

该文档仅谈论提供的build_file中引用目标,但我找不到任何信息如何参考在提供的build_file中提供的workspace_file中定义的依赖项。

通常的@stringtemplate3//jar语法失败,但我不知道如何包括对导入档案的引用,该档案根据手册必须从@antlr3_runtimes开始。

项目布局看起来像这样:

├── antlr.BUILD
├── antlr.WORKSPACE
├── BUILD
├── external_dependency
│   └── src
│       └── main
│           └── java
│               └── bazel
│                   ├── BUILD
│                   └── Hello.java
├── LICENSE
└── WORKSPACE

WORKSPACE定义看起来像这样:

workspace(name="bazel")
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
    name = "antlr3_runtimes",
    sha256 = "d4f7d3c38c5523f8009ff37528e5797c81adb454be6acc9af507cfcb41f2016f",
    strip_prefix = "antlr3-master",
    urls = ["https://github.com/ibre5041/antlr3/archive/master.tar.gz"],
    build_file = "@//:antlr.BUILD",
    workspace_file = "@//:antlr.WORKSPACE",
)

似乎甚至没有分析提供的workspace_file。当它试图解析自定义构建文件中的依赖项时,该构建已失败。

可以在这里找到repro:https://github.com/marcohu/bazel

bazel build //...显示此错误消息:

ERROR: /home/user/.cache/bazel/_bazel_user/64492308e78c9898c41f12c18dd29b63/external/antlr3_runtimes/BUILD.bazel:43:1: no such package '@stringtemplate3//jar': The repository '@stringtemplate3' could not be resolved and referenced by '@antlr3_runtimes//:antlr3_tool'
ERROR: Analysis of target '//external_dependency/src/main/java/bazel:hello' failed; build aborted: no such package '@stringtemplate3//jar': The repository '@stringtemplate3' could not be resolved

我在Bazel Diseseard Tracker中报告了这一点,但是它被拒绝了以在此处发布的提示。

这种用例是不可能的吗?还是我弄错了语法?

至少到目前为止(我想这个说法可能会在将来的版本中发生变化(,巴泽尔不直接支持及物的外部依赖关系。WORKSPACE文件即使在您的情况下仍然会被读取,如果包含完全破碎的语法,它仍然会失败,但是它不会"朝上",您可以(当前(您可以(例如(从不存在的标签中加载或调用Undefined功能,对于嵌套的WORKSPACE

您本质上有两个选择:

  1. 在您的"父"/top WORKSPACE中重复您的嵌套依赖项(http_archive规则(。

  2. 您可以定义带有相应的存储库规则的函数,并在"父级"/top WORKSPACE中调用。

bazel实际上确实支持JVM依赖关系的及时提取。https://github.com/bazelbuild/rules_jvm_external

工作区

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
rules_jvm_external_tag = "2.0.1"
rules_jvm_external_sha = "55e8d3951647ae3dffde22b4f7f8dee11b3f70f3f89424713debd7076197eaca"
http_archive(
    name = "rules_jvm_external",
    sha256 = rules_jvm_external_sha,
    strip_prefix = "rules_jvm_external-%s" % rules_jvm_external_tag,
    url = "https://github.com/bazelbuild/rules_jvm_external/archive/%s.zip" % rules_jvm_external_tag,
)
load("@rules_jvm_external//:defs.bzl", "maven_install")
maven_install(
    name = "maven",
    artifacts = [
        "io.grpc:grpc-netty-shaded:1.22.1",
        "io.grpc:grpc-api:1.22.1",
        "io.grpc:grpc-testing:1.22.1",
        "io.grpc:grpc-core:1.22.1",
        "junit:junit:4.12",
    ],
    repositories = [
        "https://jcenter.bintray.com/",
        "https://repo1.maven.org/maven2",
    ],
)

构建

...
java_library(
    name = "hyphenation-service",
    srcs = ["src/test/java/com/example/hyphenation/HyphenationServiceTest.java"],
    deps = ["@maven//:io_grpc_grpc_core"]
)
...

示例存储库https://github.com/mancini0/bazel-grpc-playground

最新更新