[英]How to troubleshoot SBT's library dependency warnings?
我正在尝试构建一个类似“ hello world”的应用程序,该应用程序使用Spark流技术从Kafka代理流式传输数据(此方法有效),过滤/处理此数据,然后使用Scalatra Web将其推送至(本地)网络浏览器框架及其来自Atmosphere的受支持的Web套接字功能。 Kafka / Spark块独立工作,而Scalatra / Atmosphere块也独立工作。 当我尝试将这两个部分放在一起时,我遇到了库依赖问题。
真正的问题:我该如何选择Spark在Scalatra上能很好发挥作用的库版本?
裸露的Scalatra / Atmosphere应用程序可以正常运行,如下所示:
organization := "com.example"
name := "example app"
version := "0.1.0"
scalaVersion := "2.12.2"
val ScalatraVersion = "2.5.+"
libraryDependencies ++= Seq(
"org.json4s" %% "json4s-jackson" % "3.5.2",
"org.scalatra" %% "scalatra" % ScalatraVersion,
"org.scalatra" %% "scalatra-scalate" % ScalatraVersion,
"org.scalatra" %% "scalatra-specs2" % ScalatraVersion % "test",
"org.scalatra" %% "scalatra-atmosphere" % ScalatraVersion,
"org.eclipse.jetty" % "jetty-webapp" % "9.4.6.v20170531" % "provided",
"javax.servlet" % "javax.servlet-api" % "3.1.0" % "provided"
)
enablePlugins(JettyPlugin)
但是,如果我为Spark和Spark流添加新的依赖项,并将Scala版本降低到2.11(Spark-Kafka流需要):
organization := "com.example"
name := "example app"
version := "0.1.0"
scalaVersion := "2.11.8"
val ScalatraVersion = "2.5.+"
val SparkVersion = "2.2.0"
libraryDependencies ++= Seq(
"org.json4s" %% "json4s-jackson" % "3.5.2",
"org.scalatra" %% "scalatra" % ScalatraVersion,
"org.scalatra" %% "scalatra-scalate" % ScalatraVersion,
"org.scalatra" %% "scalatra-specs2" % ScalatraVersion % "test",
"org.scalatra" %% "scalatra-atmosphere" % ScalatraVersion,
"org.eclipse.jetty" % "jetty-webapp" % "9.4.6.v20170531" % "provided",
"javax.servlet" % "javax.servlet-api" % "3.1.0" % "provided"
)
libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % SparkVersion,
"org.apache.spark" %% "spark-streaming" % SparkVersion,
"org.apache.spark" %% "spark-streaming-kafka-0-8" % SparkVersion
)
enablePlugins(JettyPlugin)
代码可以编译,但是我收到SBT的驱逐警告:
[warn] There may be incompatibilities among your library dependencies.
[warn] Here are some of the libraries that were evicted:
[warn] * org.json4s:json4s-jackson_2.11:3.2.11 -> 3.5.3
[warn] Run 'evicted' to see detailed eviction warnings
最后,当Jetty尝试运行Web服务器时,它失败并显示以下错误:
WARN:oejuc.AbstractLifeCycle:main: FAILED org.eclipse.jetty.annotations.ServletContainerInitializersStarter@53fb3dab: java.lang.NoClassDefFoundError: com/sun/jersey/spi/inject/InjectableProvider
java.lang.NoClassDefFoundError: com/sun/jersey/spi/inject/InjectableProvider
我该怎么做? 我是Scala世界的新手,并且错综复杂的依赖让我震惊。
删除驱逐警告的一种方法是使用dependencyOverrides
将库依赖项与所需版本一起添加
尝试在您的SBT文件中添加以下内容,然后重新生成应用程序
dependencyOverrides += "org.json4s" % "json4s-jackson_2.11" % "3.5.3"
在此处查看SBT文档
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.