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.jettyとの除外ルールを提案するこの同じ問題の例はたくさんありますがjavax.servlet、私にはうまくいかないようです。

spark-submitビルドされたsbt assemblyjar it worksファイルで使用すると、テストを書くことができません。

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 に答える