代码之家  ›  专栏  ›  技术社区  ›  Siva

运行sbt程序集时出错:sbt重复数据消除错误

  •  3
  • Siva  · 技术社区  · 11 年前

    我正面临下面帖子中描述的确切问题,建议的答案没有帮助。 sbt-assembly: deduplication found error

    [error] (*:assembly) deduplicate: different file contents found in the following:
    [error] C:\Users\xxx\.ivy2\cache\org.eclipse.jetty.orbit\javax.transaction\orbits\javax.transaction-1.1.1.v201105210645.jar:META-INF/ECLIPSEF.RSA
    [error] C:\Users\xxx\.ivy2\cache\org.eclipse.jetty.orbit\javax.servlet\orbits\javax.servlet-3.0.0.v201112011016.jar:META-INF/ECLIPSEF.RSA
    [error] C:\Users\xxx\.ivy2\cache\org.eclipse.jetty.orbit\javax.mail.glassfish\orbits\javax.mail.glassfish-1.4.1.v201005082020.jar:META-INF/ECLIPSEF.RSA
    [error] C:\Users\xxx\.ivy2\cache\org.eclipse.jetty.orbit\javax.activation\orbits\javax.activation-1.1.0.v201105071233.jar:META-INF/ECLIPSEF.RSA
    [error] Total time: 14 s, completed Sep 9, 2014 5:21:01 PM
    

    我的build.sbt文件包含

    name := "Simple"
    
    version := "0.1.0"
    
    scalaVersion := "2.10.4"
    
    libraryDependencies ++= Seq(
      "org.twitter4j" % "twitter4j-stream" % "3.0.3"
    )
    
    //libraryDependencies += "org.apache.spark" %% "spark-core" % "1.0.2"
    
    libraryDependencies += "org.apache.spark" %% "spark-streaming" % "1.0.2"
    
    libraryDependencies += "org.apache.spark" %% "spark-streaming-twitter" % "1.0.2"
    
    libraryDependencies += "com.github.nscala-time" %% "nscala-time" % "0.4.2"
    
    libraryDependencies ++= Seq(
        ("org.apache.spark"%%"spark-core"%"1.0.2").
        exclude("org.eclipse.jetty.orbit", "javax.servlet").
        exclude("org.eclipse.jetty.orbit", "javax.transaction").
        exclude("org.eclipse.jetty.orbit", "javax.mail").
        exclude("org.eclipse.jetty.orbit", "javax.activation").
        exclude("commons-beanutils", "commons-beanutils-core").
        exclude("commons-collections", "commons-collections").
        exclude("commons-collections", "commons-collections").
        exclude("com.esotericsoftware.minlog", "minlog")
    )
    
    resolvers += "Akka Repository" at "http://repo.akka.io/releases/"
    
        mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) =>
        {
            case PathList("javax", "servlet", xs @ _*)         => MergeStrategy.first
            case PathList("javax", "transaction", xs @ _*)     => MergeStrategy.first
            case PathList("javax", "mail", xs @ _*)     => MergeStrategy.first
            case PathList("javax", "activation", xs @ _*)     => MergeStrategy.first
            case PathList(ps @ _*) if ps.last endsWith ".html" => MergeStrategy.first
            case "application.conf" => MergeStrategy.concat
            case "unwanted.txt"     => MergeStrategy.discard
            case x => old(x)
            }
        }
    

    关于如何解决上述问题,有什么建议吗?

    2 回复  |  直到 9 年前
        1
  •  3
  •   4e6    11 年前

    如果您计划从Spark运行程序,那么我强烈建议将所有Spark依赖项添加为 provided 因此它们将被排除在装配任务之外。

    libraryDependencies ++= Seq(
      "org.apache.spark" %% "spark-core"              % "1.0.2" % "provided",
      "org.apache.spark" %% "spark-streaming"         % "1.0.2" % "provided",
      "org.apache.spark" %% "spark-streaming-twitter" % "1.0.2" % "provided")
    

    在另一种情况下,您需要删除 jar s,或向 mergeStrategy ,如果是你的话

    case PathList("META-INF", "ECLIPSEF.RSA") => MergeStrategy.first
    

    如果你仍然想处理Spark的依赖关系, sbt-dependency-graph 插件应该会有所帮助。还要注意其他Spark依赖项,如 spark-streaming spark-streaming-twitter 可能需要 exclude 指令。

        2
  •  0
  •   samthebest Ende Neu    11 年前

    因此,为了让那些烦人的“重复数据消除”消息消失,我并没有使用排除功能,这似乎对我没有帮助。我复制并粘贴了 defaultMergeStrategy 从sbt代码中删除,并更改了上面的行 deduplicate first 。我还必须在结尾处加上一个全包来坚持 第一 也老实说,我不知道这意味着什么,也不知道为什么它会让烦人的消息消失。。。我没有时间获得sbt的博士学位,我希望我的代码只是构建!!因此合并层变为:

    mergeStrategy in assembly <<= (mergeStrategy in assembly) ((old) => {
      case x if Assembly.isConfigFile(x) =>
        MergeStrategy.concat
      case PathList(ps @ _*) if Assembly.isReadme(ps.last) || Assembly.isLicenseFile(ps.last) =>
        MergeStrategy.rename
      case PathList("META-INF", xs @ _*) =>
        (xs map {_.toLowerCase}) match {
          case ("manifest.mf" :: Nil) | ("index.list" :: Nil) | ("dependencies" :: Nil) =>
            MergeStrategy.discard
          case ps @ (x :: xs) if ps.last.endsWith(".sf") || ps.last.endsWith(".dsa") =>
            MergeStrategy.discard
          case "plexus" :: xs =>
            MergeStrategy.discard
          case "services" :: xs =>
            MergeStrategy.filterDistinctLines
          case ("spring.schemas" :: Nil) | ("spring.handlers" :: Nil) =>
            MergeStrategy.filterDistinctLines
          case _ => MergeStrategy.first // Changed deduplicate to first
        }
      case PathList(_*) => MergeStrategy.first // added this line
    })
    
    推荐文章