【问题标题】:Deduplicate: Different File Contents Found Error for SBT and Scala重复数据删除:发现 SBT 和 Scala 的不同文件内容错误
【发布时间】:2017-02-18 12:44:16
【问题描述】:

我正在尝试通过 SBT 构建一个 JAR 文件,我的驱动程序脚本位于 Scala 中。但是,当我运行“sbt 程序集”时,我收到了大量的:

deduplicate: different file contents found in the following:

显示该消息的整个目录列表太大,无法在此处发布,因此我附上了一个屏幕截图,您可以在下面查看。我的构建文件包含以下内容:

libraryDependencies ++= Seq("org.apache.spark" %% "spark-core" % "2.0.0" % "provided", "org.apache.spark" %% "spark-mllib" % "2.0.0")

我尝试了 Onilton Maciel 向this question 提供的解决方案,但无济于事。我也对如何实现 Martin Senne 提供的解决方案感到困惑,因为 Assembly 插件的“设置”部分的设置说明不清楚如何实现他的代码 sn-p。任何帮助,将不胜感激。谢谢

【问题讨论】:

  • 我觉得上传文字错误总比上传错误图片好。

标签: scala apache-spark sbt


【解决方案1】:

因为组装插件的“设置”部分的设置说明不清楚如何实现他的代码 sn-p。

这意味着你应该在build.sbt根目录sbt文件中添加合并策略

sbt-assembly 官方文档中有一个示例,并根据您的冲突更新它:

import sbtassembly.MergeStrategy
assemblyMergeStrategy in assembly := {
  case PathList("org", "apache", "hadoop", "yarn", "factories", "package-info.class")         => MergeStrategy.discard
  case PathList("org", "apache", "hadoop", "yarn", "provider", "package-info.class")         => MergeStrategy.discard
  case PathList("org", "apache", "hadoop", "util", "provider", "package-info.class")         => MergeStrategy.discard
  case PathList("org", "apache", "spark", "unused", "UnusedStubClass.class")         => MergeStrategy.first
}

希望对你有帮助。

【讨论】:

  • 感谢 chengpohi!该解决方案确实很有帮助。我将您的代码 sn-p 添加到我的 build.sbt 文件中,并收到了 scala.MatchError。然后我遵循link 中提供的解决方案 - 因为我相信我错过了默认情况。但是,在添加默认情况后,我收到了另一个相同的原始重复数据删除错误。我相信这是因为我没有为其配置 MergeStrategy 的许多其他依赖项。你会推荐什么?
  • 我通过添加 'case PathList("org", "apache", xs @ _*) => MergeStrategy.last' 对您的代码进行了轻微修改,现在构建工作正常。谢谢!
猜你喜欢
  • 2017-05-21
  • 2014-09-28
  • 2014-06-10
  • 2016-03-22
  • 1970-01-01
  • 2015-03-09
  • 2017-06-16
  • 2015-01-27
  • 2019-06-03
相关资源
最近更新 更多