Bazel引入finagle-http报错:com.twitter.finagle包无Service成员
问题根因与修复方案
你遇到的报错是配置语法错误+Scala版本冲突+依赖未正确传递三个问题共同导致的,按以下步骤修改即可:
1. 核心问题说明
- 语法错误:BUILD文件中
deps = ["spark]缺少右引号,依赖声明直接失效,类库根本没被引入 - 版本冲突:WORKSPACE中Spark依赖都是Scala 2.11版本(后缀
_2.11),但finagle-http用的是Scala 2.12版本(后缀_2.12),跨版本的Scala库互不兼容 - 冗余依赖:你的业务代码完全没有用到Spark相关功能,多余的Spark依赖只会造成版本冲突,可以直接删除
2. 修复后的配置文件
修正WORKSPACE配置
maven_install( artifacts = [ # 移除所有无用Spark依赖,finagle-http会自动拉取依赖的finagle-core、util-core等传递依赖 "com.twitter:finagle-http_2.12:21.8.0", ], repositories = [ "https://repo.maven.apache.org/maven2/", ], # 显式开启传递依赖拉取 fetch_transitive_deps = True, )
修正BUILD配置
load("@io_bazel_rules_scala//scala:scala.bzl", "scala_binary") package(default_visibility = ["//visibility:public"]) scala_binary( name="helloworld", # 如果你的Main.scala没有声明package microservices,此处主类要改为HelloWorld main_class="HelloWorld", srcs=[ "Main.scala", ], # 修正引号缺失问题 deps = [":spark"], ) java_library( name = "spark", exports = [ "@maven//:com_twitter_finagle_http_2_12_21_8_0", ], )
3. 可选补充配置
如果修改后依然提示com.twitter.util相关类找不到,可以在WORKSPACE的artifacts中显式添加核心依赖:
"com.twitter:finagle-core_2.12:21.8.0", "com.twitter:util-core_2.12:21.8.0"
同时要确保你的rules_scala全局配置的Scala版本和依赖后缀一致,必须全为2.12版本。
内容的提问来源于stack exchange,提问作者ss301
相关产品推荐
相关产品推荐

