使用sbt+scala编写spark程序单机运行时出现
首先按网上给的方案
首先出现
Exception in thread "main" java.lang.VerifyError: class com.fasterxml.jackson.module.scala.ser.ScalaIteratorSerializer overrides final method withResolved
在sbt中加入
"com.fasterxml.jackson.core" % "jackson-databind" % "2.4.4"
出现下面问题
java.lang.SecurityException: class "javax.servlet.FilterRegistration"'s signer information does not match signer information of other classes in the same package
然后再查资料要求在sbt中加入
"javax.servlet" % "javax.servlet-api" % "3.0.1",
然后一般这样就解决了,但是今天真是日了狗了,加入之后又出现,简直就是死循环
Exception in thread "main" java.lang.VerifyError: class com.fasterxml.jackson.module.scala.ser.ScalaIteratorSerializer overrides final method withResolved
新方案
- 先用"evicted"命令看那些包冲突
然后发现虽然我们刚才加入了的com.fasterxml.jackson.core的版本是2.4.4,但是我们最终使用的却是2.8.11版本。而这个版本是play-json引入的。所以我们要想办法排除play-json对我们带来的影响
思路:
- 降低play-json版本 (略)
- 从play-json中排除com.fasterxml.jackson.core包
"com.typesafe.play" %% "play-json" % "latest.integration" excludeAll ExclusionRule("com.fasterxml.jackson.core","jackson-databind"),
进一步发现我们已经有多个地方引入2.4.4的包了,所以我们就不用多此一举自己引入了,注销刚才自己加入的依赖
// "com.fasterxml.jackson.core" % "jackson-databind" % "2.4.4"
重新导入依赖,然后"evicted"一下,发现问题已经解决
遗留问题
- 刚才我们明明加入了
"javax.servlet" % "javax.servlet-api" % "3.0.1"
,但是在冲突列表确找不到,那我们把它删了又不行,实在费解。
2.如何实现dependencyTree的输出重定向,测试网上的做法都失败了