Bazel 如何解决外部包工作区_文件中的依赖关系?
尝试从通过Bazel 如何解决外部包工作区_文件中的依赖关系?,bazel,Bazel,尝试从通过http\u archive导入的外部包中使用build\u文件中的目标,该目标通过workspace\u文件属性在外部包工作区中定义了依赖项,但失败。我正在Debian测试中使用Bazel0.27.0 该文档只谈到引用所提供的build\u文件中的目标,但我找不到如何引用所提供的workspace\u文件中定义的依赖项的任何信息 通常的@stringtemplate3//jar语法失败,但我不知道如何包含对导入的归档文件的引用,根据手册,该文件必须以@antlr3\u运行时开始 项目
http\u archive
导入的外部包中使用build\u文件
中的目标,该目标通过workspace\u文件
属性在外部包工作区中定义了依赖项,但失败。我正在Debian测试中使用Bazel0.27.0
该文档只谈到引用所提供的build\u文件
中的目标,但我找不到如何引用所提供的workspace\u文件
中定义的依赖项的任何信息
通常的@stringtemplate3//jar
语法失败,但我不知道如何包含对导入的归档文件的引用,根据手册,该文件必须以@antlr3\u运行时开始
项目布局如下所示:
├── antlr.BUILD
├── antlr.WORKSPACE
├── BUILD
├── external_dependency
│ └── src
│ └── main
│ └── java
│ └── bazel
│ ├── BUILD
│ └── Hello.java
├── LICENSE
└── WORKSPACE
工作区的定义如下所示:
├── antlr.BUILD
├── antlr.WORKSPACE
├── BUILD
├── external_dependency
│ └── src
│ └── main
│ └── java
│ └── bazel
│ ├── BUILD
│ └── Hello.java
├── LICENSE
└── WORKSPACE
工作区(name=“bazel”)
加载(“@bazel_-tools//tools/build_-defs/repo:http.bzl”,“http_-archive”)
http\u档案(
name=“antlr3\u运行时”,
sha256=“d4f7d3c38c5523f8009ff37528e5797c81adb454be6acc9af507cfcb41f2016f”,
strip_prefix=“antlr3主控”,
URL=[”https://github.com/ibre5041/antlr3/archive/master.tar.gz"],
build_file=“@/:antlr.build”,
workspace_file=“@/:antlr.workspace”,
)
似乎提供的workspace\u文件
甚至没有进行分析。生成在尝试解析自定义生成文件中的依赖项时已失败
可在此处找到复制:
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问题跟踪器中报告了这一点,但它被拒绝了,并暗示要在这里发布
这个用例是不可能的吗?还是我的语法搞错了?至少到目前为止(我想这个语句在未来的版本中可能会改变),bazel不直接支持可传递的外部依赖项<代码>工作区
文件仍然会被读取,即使在您的情况下,如果它包含完全破坏的语法,它仍然会失败,但它不会“被执行”,并且您可以(当前)从不存在的标签加载实例或调用未定义的函数,对于嵌套的工作区
,它仍然是不明智的
您基本上有两种选择:
在“父”//top工作区中重复嵌套的依赖项(http\u归档
规则)
您可以使用相应的存储库规则定义函数,并在“父”//top工作区中加载和调用这些规则
Bazel实际上支持jvm依赖项的可传递抓取
工作区
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"]
)
...
示例存储库谢谢。我认为http_archive
工作区可以独立运行,但遗憾的是,这似乎是不可能的。第2点就是这样,你可以使用(自定义)函数/规则来实现这一点,但这与目前不支持的跨外部依赖的可传递依赖不同。