1

运行创建火花上下文的单元测试时,我得到一个 java.lang.SecurityException. 我了解原因是什么,但不知道如何追踪如何解决它。这是多个依赖项共享javax.servlet具有不同签名者信息的同一包。

// Dependencies
libraryDependencies ++= Seq(
  "org.apache.spark" % "spark-hive_2.10" % "1.6.2" % Provided
)

// Test dependencies
libraryDependencies ++= Seq(
  "junit" % "junit" % "4.10" % Test,
  "org.scalatest" %% "scalatest" % "3.0.4" % Test,
  "org.apache.hadoop" % "hadoop-minicluster" % "2.5.0" % Test
)

我创建了一个示例项目来演示这一点

有许多相同问题的示例都建议了 和 的排除规则org.mortonbay.jettyjavax.servlet但似乎没有一个对我有用。

当我spark-submit在构建的sbt assemblyjar 上使用它的工作文件时,我无法为它编写测试。

4

1 回答 1

1

好的,想通了这个问题。事实证明,导致问题的依赖树实际上是在我的测试依赖项中,而不是运行时依赖项。

更新到以下内容已解决该问题。

// Test dependencies
libraryDependencies ++= Seq(
  "junit" % "junit" % "4.10" % Test,
  "org.scalatest" %% "scalatest" % "3.0.4" % Test,
  "org.apache.hadoop" % "hadoop-minicluster" % "2.5.0" % Test
).map(
  _.excludeAll(ExclusionRule(organization = "javax.servlet"))
)

我已经更新了 github 上的示例。

于 2017-12-12T13:57:57.087 回答