以下是尝试排除javax.servlet类:
libraryDependencies ++= Seq(
..
("org.apache.spark" % "spark-core_2.10" % sparkVersion \
% "compile->default" withSources()).exclude("org.mortbay.jetty", "servlet-api"),
以下是我对MergeStrategy的尝试:
mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) => {
..
case PathList("javax", "servlet", xs @ _*) => MergeStrategy.singleOrError
..
以下显示正在加载javax.servlet类的多个副本:
[error](*:assembly)singleOrError:找到相同的多个文件 目标路径:[错误] C:\ Users \用户s80035683.ivy2 \缓存\ org.mortbay.jetty \ servlet的API-2.5 \罐\ servlet的API-2.5-6.1.14.jar:的javax / servlet的/ Filter.class [错误] C:\ Users \用户s80035683.ivy2 \缓存\的javax.servlet \ servlet的API \罐\ servlet的API-2.5.jar:的javax / servlet的/ Filter.class [错误] C:\ Users \用户s80035683.ivy2 \缓存\ org.eclipse.jetty.orbit \的javax.servlet \轨道\的javax.servlet-3.0.0.v201112011016.jar:的javax / servlet的/ Filter.class [错误] C:\ Users \用户s80035683.ivy2 \缓存\ org.mortbay.jetty \ servlet的API \罐\ servlet的API-2.5-20110124.jar:的javax / servlet的/ Filter.class
注意:这不是DUPLICATE,因为类似的问题不能解决这个问题。例如+以下问题的答案(“默认选择的最高版本”)不起作用
答案 0 :(得分:1)
您可以使用sbt-dependency-graph并查看servlet-api
所在的位置作为传递依赖项。
您可以使用what-depends-on <organization> <module> <revision>
命令执行此操作。
知道你可以排除传递依赖。
这比从特定jar中排除类更容易(除非你不关心哪个jar,你只想从任何jar中获取它)。
您还可以查看我对another question的答案,了解如何编写自定义MergeStrategy
,这将知道该课程来自哪个jar。