2014-09-09 2 views
3

아래 게시물에 설명 된대로 정확한 문제가 발생하며 제안 된 대답이 도움이되지 않습니다. sbt-assembly: deduplication found errorsbt 어셈블리를 실행하는 중 오류가 발생했습니다. sbt 중복 제거 오류

[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) 
     } 
    } 

위의 문제를 해결하는 방법에 대한 포인터를 포함?

답변

3

Spark에서 프로그램을 실행하려면 모든 Spark 종속성을 provided으로 추가하여 어셈블리 작업에서 제외시켜야합니다. 당신은 여전히 ​​처리하고자하는 경우, 귀하의 경우는

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

것 다른 경우

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의를 제거하거나 또는 mergeStrategy에 적절한 라인을 추가 할 필요가 스파크의 의존성 지옥, sbt-dependency-graph 플러그인이 도움이됩니다. 또한 spark-streamingspark-streaming-twitter과 같은 다른 스파크 종속성은 exclude 지시어도 필요합니다.

+0

"이 프로그램을 Spark에서 실행할 계획이라면 제공된 모든 Spark 의존성을 추가하는 것이 좋습니다." 어떻게 추가합니까? – Siva

+0

@Siva 즉, Spark이 실행 중일 때 이러한 병은 작업을 배포 할 때 이미 사용할 수 있으므로 응용 프로그램과 함께 제공 할 필요가 없습니다. 내 업데이트 답변을 참조하십시오. – 4e6

+1

그리고 위의 병합 전략을 추가하려고하면 다음과 같은 오류가 발생합니다. [오류] C : \ Users \ xxx \ .ivy2 \ cache \ com.esotericsoftware.kryo \ kryo \ bundles \ kryo-2.21.jar : co.kr/esotericsoftware/minlog/Log $ Logger.class 오류] C : \ Users \ xxx \ .ivy2 \ cache \ com.esotericsoftware.minlog \ minlog \ jars \ minlog-1.2.jar : com/esotericsoftware/minlog/Log $ Logger.class – Siva

0

성가신 "중복 제거"메시지가 사라지도록하기 위해 제외 된 것들을 신경 쓰지 않았으므로 나에게 도움이되지 못했습니다. 복사 및 붙여 넣기 defaultMergeStrategy sbt 코드에서 그냥 deduplicatefirst 수있는 줄을 변경했습니다. 나는 또한 first을 주장하기 위해 마지막에 캐치를 모두 추가해야했다. 솔직히 말해서 나는 이것이 무엇을 의미하는지, 또는 성가신 메시지가 사라지는 이유를 모른다 ... 나는 Phd를 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 
}) 
관련 문제