Приложение Scalatra с зависимостью искры возвращает java.lang.NoSuchFieldError: INSTANCE из-за нескольких версий httpclient - PullRequest
1 голос
/ 17 мая 2019

Я пытаюсь создать приложение Scalatra, которое запускает код с помощью spark. Я действительно могу собрать толстый флягу с sbt-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 есть функция затенения, она работает при создании толстого фляги, и мне нужно это решение во время тестов разработки. Источники:

Есть ли способ разрешить этот тип конфликта с помощью 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"
...