杰克逊版本太旧了

时间:2016-07-31 16:52:21

标签: scala apache-spark sbt

我有以下build.sbt文件:

name := "myProject"

version := "1.0"

scalaVersion := "2.11.8"

javaOptions ++= Seq("-Xms512M", "-Xmx2048M", "-XX:MaxPermSize=2048M", "-XX:+CMSClassUnloadingEnabled")


dependencyOverrides ++= Set(
  "com.fasterxml.jackson.core" % "jackson-core" % "2.8.1"
)

// additional libraries
libraryDependencies ++= Seq(
  "org.apache.spark" %% "spark-core" % "2.0.0" % "provided",
  "org.apache.spark" %% "spark-sql" % "2.0.0" % "provided",
  "org.apache.spark" %% "spark-hive" % "2.0.0" % "provided",
  "com.databricks" %% "spark-csv" % "1.4.0",
  "org.scalactic" %% "scalactic" % "2.2.1",
  "org.scalatest" %% "scalatest" % "2.2.1" % "test",
  "org.scalacheck" %% "scalacheck" % "1.12.4",
  "com.holdenkarau" %% "spark-testing-base" % "2.0.0_0.4.4" % "test",
)

但是,当我运行代码时,我收到此错误:

An exception or error caused a run to abort. 
java.lang.ExceptionInInitializerError
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.4.4
    at com.fasterxml.jackson.module.scala.JacksonModule$class.setupModule(JacksonModule.scala:56)
    at com.fasterxml.jackson.module.scala.DefaultScalaModule.setupModule(DefaultScalaModule.scala:19)
    at com.fasterxml.jackson.databind.ObjectMapper.registerModule(ObjectMapper.java:549)
    at org.apache.spark.rdd.RDDOperationScope$.<init>(RDDOperationScope.scala:82)
    at org.apache.spark.rdd.RDDOperationScope$.<clinit>(RDDOperationScope.scala)
    ... 58 more

为什么会这样? 我已将dependencyOverrides的新版本添加到 //// //PHP 5.3 + Class find and replace string in files // //by Bruce Afruz // //2013 // //example usage for single file: // //$new = new fileReplacement('./'); //$new->setExt("check.php"); //$new->changeContents("hello", "goodbye"); // //example usage for multiple files: // //$new = new fileReplacement('./test'); //$new->setExt("*.html"); //$new->changeContents("hello", "goodbye"); // //to change directory: // //$new = new fileReplacement('./test'); //$new->setDir("./test2"); //$new->setExt("*.html"); //$new->changeContents("hello", "goodbye"); //// class fileReplacement { private $ext , $dir ; public function getDir() { return $this->dir; } public function setDir($dir) { $this->dir = $dir; } public function getExt() { return $this->ext; } public function setExt($ext) { $this->ext = $ext; } function __construct($dir) { $this->dir = $dir; } public function rglob($pattern = '*', $flags = 0, $path = '') { chdir($this->getDir()); $paths = glob($path . '*', GLOB_MARK | GLOB_ONLYDIR | GLOB_NOSORT); $files = glob($path . $pattern, $flags); foreach ($paths as $path) { $files = array_merge($files, $this->rglob($pattern, $flags, $path)); } return $files; } public function changeContents($replace , $sentence , $flags = 0, $path = '') { $all = $this->rglob($this->getExt() , $flags, $path); foreach ($all as $file) { $filename = $file; $handle = fopen($filename, "r"); $contents = fread($handle, filesize($filename)); fclose($handle); $contents = str_replace($replace , $sentence, $contents); if (is_writable($filename)) { if (!$handle = fopen($filename, 'w+')) { echo "Cannot open file ($filename) "; exit; } // Write $contents to our opened file. if (fwrite($handle, $contents) === FALSE) { echo "Cannot write to file ($filename) "; exit; } echo "Success, wrote content to file ($filename) "; fclose($handle); } else { echo "The file $filename is not writable "; } } }} (查看此处has mentioned in documentation后),因此不应使用旧版本。

1 个答案:

答案 0 :(得分:3)

jackson-core和jackson-databind版本应该匹配(至少在次要版本中,我相信)。

请删除dependencyOverrides并拥有

libraryDependencies ++= Seq(
  ...
  "com.fasterxml.jackson.core" % "jackson-databind" % "2.8.1"
)

或在dependencyOverrides

中同时指定
dependencyOverrides ++= Set(
  "com.fasterxml.jackson.core" % "jackson-core" % "2.8.1"
  "com.fasterxml.jackson.core" % "jackson-databind" % "2.8.1"
)

虽然我不确定我明白你要做什么;链接的问题似乎表明你应该使用旧版本(2.4.4)。