尝试从通过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
。
您本质上有两个选择:
-
在您的"父"/top
WORKSPACE
中重复您的嵌套依赖项(http_archive
规则(。 -
您可以定义带有相应的存储库规则的函数,并在"父级"/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