无法在 SBT 中运行 Apache Spark 相关单元测试 - NoClassDefFoundError

2024-05-11

我有一个简单的单元测试,使用SparkContext。我可以在 IntelliJ Idea 中运行单元测试,没有任何问题。但是,当尝试从 SBT shell 运行相同的测试时,我收到以下错误:

java.lang.NoClassDefFoundError: org/eclipse/jetty/server/bio/SocketConnector
    at org.apache.spark.HttpServer.org$apache$spark$HttpServer$$doStart(HttpServer.scala:74)
    at org.apache.spark.HttpServer$$anonfun$1.apply(HttpServer.scala:60)
    at org.apache.spark.HttpServer$$anonfun$1.apply(HttpServer.scala:60)
    at org.apache.spark.util.Utils$$anonfun$startServiceOnPort$1.apply$mcVI$sp(Utils.scala:1446)
    at scala.collection.immutable.Range.foreach$mVc$sp(Range.scala:141)
    at org.apache.spark.util.Utils$.startServiceOnPort(Utils.scala:1442)
    at org.apache.spark.HttpServer.start(HttpServer.scala:60)
    at org.apache.spark.HttpFileServer.initialize(HttpFileServer.scala:45)
    at org.apache.spark.SparkEnv$.create(SparkEnv.scala:243)
    at org.apache.spark.SparkContext.<init>(SparkContext.scala:203)
    at org.apache.spark.SparkContext.<init>(SparkContext.scala:118)
    at com.company.myservice.merging.Merger.<init>(Merger.scala:16)
    at com.company.myservice.merging.MergerTest.<init>(MergerTest.scala:16)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at java.lang.Class.newInstance(Class.java:374)
    at org.scalatest.tools.Framework$ScalaTestTask.execute(Framework.scala:641)
    at sbt.TestRunner.runTest$1(TestFramework.scala:84)
    at sbt.TestRunner.run(TestFramework.scala:94)
    at sbt.TestFramework$$anon$2$$anonfun$$init$$1$$anonfun$apply$8.apply(TestFramework.scala:224)
    at sbt.TestFramework$$anon$2$$anonfun$$init$$1$$anonfun$apply$8.apply(TestFramework.scala:224)
    at sbt.TestFramework$.sbt$TestFramework$$withContextLoader(TestFramework.scala:212)
    at sbt.TestFramework$$anon$2$$anonfun$$init$$1.apply(TestFramework.scala:224)
    at sbt.TestFramework$$anon$2$$anonfun$$init$$1.apply(TestFramework.scala:224)
    at sbt.TestFunction.apply(TestFramework.scala:229)
    at sbt.Tests$.sbt$Tests$$processRunnable$1(Tests.scala:211)
    at sbt.Tests$$anonfun$makeSerial$1.apply(Tests.scala:217)
    at sbt.Tests$$anonfun$makeSerial$1.apply(Tests.scala:217)
    at sbt.std.Transform$$anon$3$$anonfun$apply$2.apply(System.scala:45)
    at sbt.std.Transform$$anon$3$$anonfun$apply$2.apply(System.scala:45)
    at sbt.std.Transform$$anon$4.work(System.scala:64)
    at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:237)
    at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:237)
    at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:18)
    at sbt.Execute.work(Execute.scala:244)
    at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:237)
    at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:237)
    at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:160)
    at sbt.CompletionService$$anon$2.call(CompletionService.scala:30)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)

这就是我的 build.scala 的样子:

import sbt._
import Keys._
import org.scalatra.sbt._
import org.scalatra.sbt.PluginKeys._
import com.mojolly.scalate.ScalatePlugin._
import ScalateKeys._
import com.github.retronym.SbtOneJar
import com.earldouglas.xsbtwebplugin.PluginKeys._
import com.earldouglas.xsbtwebplugin.WebPlugin._
import sbtassembly.Plugin._
import AssemblyKeys._
import sbtassembly.Plugin.AssemblyKeys._


object myservice extends Build {
  val Organization = "com.company"
  val Name = "myservice"
  val Version = "0.1.0-SNAPSHOT"
  val ScalaVersion = "2.10.4"
  val ScalatraVersion = "2.3.0"

  // settings for sbt-assembly plugin
  val myAssemblySettings = assemblySettings ++ Seq(

    // handle conflicts during assembly task
    mergeStrategy in assembly <<= (mergeStrategy in assembly) {
      (old) => {
        case PathList("javax", "servlet", xs @ _*)         => MergeStrategy.first
        case PathList(ps @ _*) if ps.last endsWith ".html" => MergeStrategy.first
        case "application.conf" => MergeStrategy.concat
        case "unwanted.txt"     => MergeStrategy.discard
        case x => old(x)
      }
    },

    // copy web resources to /webapp folder
    resourceGenerators in Compile <+= (resourceManaged, baseDirectory) map {
      (managedBase, base) =>
        val webappBase = base / "src" / "main" / "webapp"
        for {
          (from, to) <- webappBase ** "*" x rebase(webappBase, managedBase / "main" / "webapp")
        } yield {
          Sync.copy(from, to)
          to
        }
    }
  )

  lazy val project = Project (
    "myapplication",
    file("."),
    settings = Defaults.defaultSettings ++ ScalatraPlugin.scalatraWithJRebel ++
      SbtOneJar.oneJarSettings ++
      scalateSettings ++ Seq(
      organization := Organization,
      name := Name,
      version := Version,
      scalaVersion := ScalaVersion,
      port in container.Configuration := 8000,
      resolvers ++= Seq (Classpaths.typesafeReleases,
        "Typesafe Releases" at "http://repo.typesafe.com/typesafe/releases/",
        "Sonatype OSS Snapshots" at "https://oss.sonatype.org/content/repositories/snapshots"),

      libraryDependencies ++= Seq(
        "org.scala-lang" % "scala-reflect" % ScalaVersion,
        "org.scala-lang" % "scala-compiler" % ScalaVersion,

        "org.scalatest" %% "scalatest" % "2.2.1" % "test",

        "org.scalaz" %% "scalaz-core" % "7.0.6",

        "org.scalatra" %% "scalatra" % ScalatraVersion,
        "org.scalatra" %% "scalatra-scalate" % ScalatraVersion,
        "org.scalatra" %% "scalatra-specs2" % ScalatraVersion % "test",
        "ch.qos.logback" % "logback-classic" % "1.0.6" % "runtime",
        "commons-codec" % "commons-codec" % "1.8",

        "org.apache.commons" % "commons-lang3" % "3.3.1",

        "org.scalaj" %% "scalaj-http" % "0.3.16",
        "net.liftweb" %% "lift-json" % "2.6-M4",

        "org.eclipse.jetty" % "jetty-webapp" % "8.1.8.v20121106" % "container;compile",
        "org.eclipse.jetty.orbit" % "javax.servlet" % "3.0.0.v201112011016" % "container;provided;test" artifacts (Artifact("javax.servlet", "jar", "jar")),

        "com.amazonaws" % "aws-java-sdk" % "1.8.5",

        "org.scala-lang.modules" %% "scala-async" % "0.9.1",

        "com.typesafe" % "config" % "1.2.1",
        "org.scalatra" %% "scalatra-auth" % "2.3.0",

        // RDBMS-Mysql
        "com.typesafe.slick" %% "slick" % "2.1.0",
        "mysql" % "mysql-connector-java" % "latest.release",
        "com.h2database" % "h2" % "1.3.175",

        // Geolocation
        "com.javadocmd" % "simplelatlng" % "1.3.0",

        // Spark and Mllib
        "org.apache.spark" %% "spark-core" % "1.1.0",
        "org.apache.spark" %% "spark-mllib" % "1.1.0", 
        // Lucene
        "org.apache.lucene" % "lucene-core" % "4.8.1",
        // for Porter Stemmer
        "org.apache.lucene" % "lucene-analyzers-common" % "4.8.1",
        // Guava for the dictionary
        "com.google.guava" % "guava" % "17.0",

        // CSV lib
        "com.github.tototoshi" %% "scala-csv" % "1.1.0-SNAPSHOT"

      ),
      scalateTemplateConfig in Compile <<= (sourceDirectory in Compile){ base =>
        Seq(
          TemplateConfig(
            base / "webapp" / "WEB-INF" / "templates",
            Seq.empty,  /* default imports should be added here */
            Seq(
              Binding("context", "_root_.org.scalatra.scalate.ScalatraRenderContext", importMembers = true, isImplicit = true)
            ),  /* add extra bindings here */
            Some("templates")
          )
        )
      }
    )
  ).settings(myAssemblySettings:_*)
    .settings( parallelExecution in ThisBuild := false : _*)
}

我尝试将以下所有依赖项添加到我的 build.scala 中,但没有成功:

    "org.eclipse.jetty" % "jetty-http" % "9.2.1.v20140609" % "container;test",
    "org.eclipse.jetty" % "jetty-plus" % "9.2.1.v20140609" % "container;test",
    "org.eclipse.jetty" % "jetty-io" % "9.2.1.v20140609" % "container;test",
    "org.eclipse.jetty" % "jetty-security" % "9.2.1.v20140609" % "container;test",
    "org.eclipse.jetty" % "jetty-server" % "9.2.1.v20140609" % "container;test",
    "org.eclipse.jetty" % "jetty-servlet" % "9.2.1.v20140609" % "container;test",
    "org.eclipse.jetty" % "jetty-webapp" % "9.2.1.v20140609" % "container;test",
    "org.eclipse.jetty" % "jetty-util" % "9.2.1.v20140609" % "container;test",

Jetty 9.2.1 不包含org/eclipse/jetty/server/bio/SocketConnector

它已从 Jetty 9 中完全删除。

您还可以混合使用 Jetty 版本。

"org.eclipse.jetty" % "jetty-webapp" % "8.1.8.v20121106" % "container;compile",
"org.eclipse.jetty" % "jetty-webapp" % "9.2.1.v20140609" % "container;test",

升级您的测试库(spark?)以支持 Jetty 9,或将 Jetty 版本降级到 8.1.8。

History:Jetty 9 支持 SPDY / NPN / ALPN / HTTP2 的工作意味着整个连接器架构进行了彻底修改。首先去掉的是所有阻塞连接器,只留下 nio 连接器。然后,为了支持所有新的协议协商步骤,所有连接器都被合并到一个新的协议中。org.eclipse.jetty.server.ServerConnector http://download.eclipse.org/jetty/stable-9/apidocs/org/eclipse/jetty/server/ServerConnector.html。 ServerConnector 具有指定加密、协议、所需协商顺序和后备的配置。

注:Jetty 7 和 Jetty 8 已接近 EOL(将于 2014 年底正式发布)。

See http://dev.eclipse.org/mhonarc/lists/jetty-announce/msg00069.html http://dev.eclipse.org/mhonarc/lists/jetty-announce/msg00069.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法在 SBT 中运行 Apache Spark 相关单元测试 - NoClassDefFoundError 的相关文章

随机推荐

  • flutter stepper 小部件 - 验证各个步骤中的字段

    我正在使用步进器小部件来收集用户信息并对其进行验证 我需要在每个步骤调用 API 因此在每个继续按钮的步骤中验证每个字段 我正在使用表单状态和表单小部件 但是问题是它验证步进器中所有步骤中的整个字段 我如何仅验证步进器中的单个步骤 我浏览了
  • 使用 SQLite 和 Python 从数据库读取:提供的绑定数量不正确

    我使用以下 python 脚本读取数据库 cur execute SELECT FROM pending where user ID 其中 ID 是某人的名字 在本例中为 Jonathan 但是 当我尝试运行此脚本时 我收到错误消息 Tra
  • 如何通过 gitlab-rails 更改电子邮件地址(避免电子邮件重新确认)

    当我等待将合并请求引入 Gitlab 以避免此问题时 我需要一种解决方法来通过 gitlab rails 控制台编辑用户的电子邮件地址 使用这个 user User find by name test user email email pr
  • 我如何公开我的IP,外部可以访问我的本地主机

    我只是想让我的IP公开 这样就可以从任何地方访问它 我正在使用ubuntu 18 04 已经安装了apache2和PHP 索引文件位于 var www html example com public html index php 在本地主机
  • 从本地存储保存和检索日期

    这似乎是一个愚蠢的问题 但我在理解 Typescript 方面遇到了相当困难 我有以下代码 var date new Date window localStorage setItem date date 如您所见 我正在生成今天的日期并通过
  • 重新采样 H264 视频以降低帧速率,同时保持高图像质量

    以下是感兴趣的视频的 mplayer 输出 br carina tmp mplayer foo mov mplayer Symbol ff codec bmp tags has different size in shared object
  • 数据表 JSF 中的延迟加载

    在我负责的许多项目中 没有什么比数据表中的延迟分页更好的了 JSF 是否有某种魔力 或者我说得对吗 它确实是一个很大的性能问题 如果你看过一些教程 几乎没有人关心惰性分页 假设您在支持 bean 上有 List 并且数据库中有 2000 行
  • 带有泛型类声明的命名空间约束

    我想知道是否 如果可以的话如何 可以将命名空间定义为泛型类声明中的约束参数 我所拥有的是这样的 namespaceMyProject Models Entities namespaceMyProject Tests BaseTest 现在我
  • Watir 脚本偶尔返回 Net::ReadTimeout 错误

    我有一个 Watir 脚本 偶尔会意外地返回此错误 Net ReadTimeout 我搜索了这个错误并发现这个问题 https stackoverflow com questions 47452276 watir get sometimes
  • 非 Activity 类中的 findViewById

    对此我仍然相对较新 在我在活动类 MainActivity 中使用的非活动类 MyLocation 中查找视图时遇到问题 我正在使用 MyLocation 来获取经度和纬度 我想在使用 GPS 或网络时突出显示文本视图 为此 我需要在非活动
  • Pytesseract,尝试检测屏幕上的文本

    我将 MSS 与 pytesseract 结合使用 尝试在屏幕上读取以确定正在监视的区域中的字符串 我的代码如下 import Image import pytesseract import cv2 import os import mss
  • C# 泛型重载 - 编译器无法确定正确的调用

    我不明白为什么编译器无法解析此处使用的正确重载 代码如下 只有一个版本的 Add 是合适的 BigFoo 是一个 IFoo 并且不实现 IEnumerable 其中 T 是一个 IFoo 但它坚持报告含糊之处 有任何想法吗 我尝试添加第二个
  • Delphi DataSnap REST 服务器从 TStream 返回 JSON 数组,而不是二进制

    我有一个与 Android 客户端通信的 REST 服务器 我将它从 XE3 ish 升级到 Berlin 其中一个服务器方法返回一个包含 jpeg 的 TStream 并且工作得很好 很高兴将图像作为二进制图像返回 升级到 Berlin
  • 如何向 WordPress.com 上托管的 WordPress 博客添加语法突出显示?

    我希望为我的 WordPress 博客提供一个好的语法荧光笔 我有哪些选择 我经常看到它具有颜色鲜艳的语法突出显示和复制到剪贴板的选项 有谁知道这是什么工具吗 在 wordpress com 上 您无法安装插件 因此您必须使用 Wordpr
  • 如何在Python中完美地将单元素列表转换为元组? [复制]

    这个问题在这里已经有答案了 所以我正在尝试这样做 tuple 1 我期望的输出是 1 但是 我得到了这个 1 但如果我这样做 tuple 1 2 它工作完美 像这样 1 2 这太奇怪了 我不知道为什么元组函数会导致这个结果 请帮我解决它 这
  • 从 DoubleLinkedList 中删除重复项

    我正在尝试删除 C 中的重复项 我已经设法使用对象默认构造函数将对象设置为 null 但我无法将其从列表中完全删除 此代码还删除了两个对象 而不仅仅是一个 这是另一个问题的转帖 我的代码和部分帖子已更改 如何按全名从双向链表中删除重复项 h
  • MongoDB 查询返回空数组

    有一个基本的 Express 应用程序连接到几乎 0 5 GB 的 MongoDB 数据库 当我运行时 router get function req res next medical data find State CT function
  • 从 google Drive 自行下载 xlsx 文件

    所以 我正在尝试制作一个小脚本 它将使用谷歌驱动器API下载一个Excel文件 通过遵循谷歌API教程 我遇到了两个错误 无法读取未定义的 on 属性 和 请求的转换是不支持 这是代码 const fs require fs const r
  • 如何手动推断表达式的类型

    给定 Haskell 函数 head filter fst 现在的问题是如何手动 手动 找到类型 如果我让 Haskell 告诉我我得到的类型 head filter fst Bool b gt Bool b 但我想了解仅使用所用函数的签名
  • 无法在 SBT 中运行 Apache Spark 相关单元测试 - NoClassDefFoundError

    我有一个简单的单元测试 使用SparkContext 我可以在 IntelliJ Idea 中运行单元测试 没有任何问题 但是 当尝试从 SBT shell 运行相同的测试时 我收到以下错误 java lang NoClassDefFoun