scala - 具有 spark 依赖项的 Scalatra 应用程序返回 java.lang.NoSuchFieldError: INSTANCE 由于多个 httpclient 版本
问题描述
我正在尝试构建一个使用 spark 运行代码的 Scalatra 应用程序。我实际上可以构建 fat jarsbt-assembly
并且端点可以工作,但是在运行测试时org.scalatra.test.scalatest._
出现以下错误:
*** RUN ABORTED ***
java.lang.NoSuchFieldError: INSTANCE
at org.apache.http.conn.ssl.SSLConnectionSocketFactory.<clinit>(SSLConnectionSocketFactory.java:146)
at org.apache.http.impl.client.HttpClientBuilder.build(HttpClientBuilder.java:964)
at org.scalatra.test.HttpComponentsClient$class.createClient(HttpComponentsClient.scala:100)
at my.package.MyServletTests.createClient(MyServletTests.scala:5)
at org.scalatra.test.HttpComponentsClient$class.submit(HttpComponentsClient.scala:63)
at my.package.MyServletTests.submit(MyServletTests.scala:5)
at org.scalatra.test.Client$class.post(Client.scala:62)
at my.package.MyServletTests.post(MyServletTests.scala:5)
at org.scalatra.test.Client$class.post(Client.scala:60)
at my.package.MyServletTests.post(MyServletTests.scala:5)
...
从其他来源来看,这似乎是一个httpclient
版本错误,因为 Scalatra 和 Spark 使用不同的版本。这些消息来源建议使用 Maven Shade 插件来重命名这些版本之一。但是,我使用的是 sbt 而不是 Maven。尽管 sbt 具有遮蔽功能,但它在创建 fat jar 时可以工作,我在开发测试期间需要这个解决方案。来源是:
有没有办法使用 SBT 解决这种冲突?我正在运行 Eclipse Scala-IDE,这些是我的依赖项built.sbt
:
val scalatraVersion = "2.6.5"
// scalatra
libraryDependencies ++= Seq(
"org.scalatra" %% "scalatra" % scalatraVersion,
"org.scalatra" %% "scalatra-scalatest" % scalatraVersion % "test",
"org.scalatra" %% "scalatra-specs2" % scalatraVersion,
"org.scalatra" %% "scalatra-swagger" % scalatraVersion,
"ch.qos.logback" % "logback-classic" % "1.2.3" % "runtime",
"org.eclipse.jetty" % "jetty-webapp" % "9.4.9.v20180320" % "container;compile",
"javax.servlet" % "javax.servlet-api" % "3.1.0" % "provided"
)
// From other projects:
// spark
libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % "2.4.0",
"org.apache.spark" %% "spark-mllib" % "2.4.0",
"org.apache.spark" %% "spark-sql" % "2.4.0"
)
// scalatest
libraryDependencies += "org.scalatest" % "scalatest_2.11" % "3.0.5" % "test"
解决方案
推荐阅读
- javascript - 更新 MongoDB 上的数据
- angular - .Net Core SPA Angular - 如何在 Index.html 中编辑构建输出脚本引用
- c - 关机,操作系统是怎么实现的呢?(C内核开发)
- laravel - 颤振自定义通知声音不起作用(FCM)
- javascript - 每个单词的首字母大写
- javascript - Jquery在打开一个时关闭同一类的所有其他下拉列表?
- python - 根据DF2中的坐标下采样DF1
- lazy-loading - 如何在网页中延迟加载文本
- java - 链式反应组件调用
- unit-testing - 使用 Jest 在 Vue 中测试按钮上的触发器单击不起作用