基于Finagle开发Hello World API报com.twitter包不存在如何解决
问题根因
- 报错本质是Finch和Finagle版本不兼容、依赖传递缺失两类问题:
- 方案1、3仅引入finch-core,部分低版本finch不会自动传递依赖完整的finagle相关包,导致找不到com.twitter包路径
- 方案2单独引入finagle-http 21.8.0,但没有匹配对应兼容的finch版本,出现版本冲突导致依赖加载失败
修复方案
第一步:替换为正确的兼容版本SBT配置
完整的build.sbt配置如下,已经适配你使用的Scala 2.12.15版本:
name := "microservicestest" version := "0.1" scalaVersion := "2.12.15" libraryDependencies ++= Seq( // 显式引入匹配版本的Finagle核心依赖 "com.twitter" %% "finagle-http" % "22.7.0", // 对应兼容版本的Finch "com.github.finagle" %% "finch-core" % "0.34.1", "com.github.finagle" %% "finch-circe" % "0.34.1", "io.circe" %% "circe-generic" % "0.14.2" )
第二步:清理本地缓存重新加载依赖
在项目根目录执行以下命令,清除之前可能损坏的依赖缓存:
sbt clean reload update
如果依赖下载过慢,可在用户目录下的.sbt/repositories文件中加入国内镜像源加速下载。
第三步:补全Scala代码缺失的导入
你的代码中缺少Text类的导入,补充后完整代码如下:
import io.finch._ import io.finch.Text import com.twitter.finagle.Http import com.twitter.util.Await object HelloWorld extends App { val api: Endpoint[String] = get("hello") { Ok("Hello, World!") } Await.ready(Http.server.serve(":8080", api.toServiceAs[Text.Plain])) }
验证
启动项目后,在浏览器或curl访问http://localhost:8080/hello,即可看到返回的Hello, World!字符串。
内容的提问来源于stack exchange,提问作者ss301
相关产品推荐
相关产品推荐

