繁体   English   中英

如何解决SBT的库依赖关系警告?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM