2017-01-30 2 views
0

내가 너무 내 스파크 프로그램 수행을 배포 할 수있는 동네 짱 항아리를 구축을 위해 노력하고이 :스파크 2 SBT 조립을 중복 오류 스칼라 2.11.8

실행 : 이것은 많은 오류를 출력

sbt assembly 

: 스칼라 2.10에 관한 질문에 대한

[error] deduplicate: different file contents found in the following: 
[error] /Users/samibadawi/.ivy2/cache/commons-collections/commons-collections/jars/commons-collections-3.2.1.jar:org/apache/commons/collections/FastHashMap$CollectionView$CollectionViewIterator.class 
[error] /Users/samibadawi/.ivy2/cache/commons-beanutils/commons-beanutils/jars/commons-beanutils-1.7.0.jar:org/apache/commons/collections/FastHashMap$CollectionView$CollectionViewIterator.class 

대답은 작동하지 않았다 spark + sbt-assembly: "deduplicate: different file contents found in the following"

해킹이 끝나면 아래 build.sbt 파일을 사용하여 컴파일 할 유용한 코드가없는 hello world 프로젝트가 생겼습니다.

어떤 것이 배제되는지와 병합 전략이 무작위로 보입니다. 이를 위해보다 체계적이고 체계적인 방법이 있습니까?

(사용 게다가 : "org.apache.spark"%% "스파크 코어"%의 sparkVersion %의 "제공"어떠한 배포 의존성이없는 경우에는 .)

build.sbt 발췌 :

import sbtassembly.AssemblyPlugin._ 

//Define dependencies. These ones are only required for Test and Integration Test scopes. 
libraryDependencies ++= Seq(
    ("org.apache.spark" %% "spark-core" % sparkVersion). 
    exclude("commons-beanutils", "commons-beanutils-core"). 
    exclude("commons-collections", "commons-collections"). 
    exclude("commons-logging", "commons-logging"). 
    exclude("com.esotericsoftware.minlog", "minlog"). 
    exclude("com.codahale.metrics", "metrics-core"). 
    exclude("aopalliance","aopalliance") 
    , 
    "org.scalatest" %% "scalatest" % "2.2.4" % "test,it" 
) 

mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) => 
    { 
    case PathList("javax", "servlet", xs @ _*) => MergeStrategy.last 
    case PathList("javax", "inject", xs @ _*) => MergeStrategy.last 
    case PathList("javax", "activation", xs @ _*) => MergeStrategy.last 
    case PathList("org", "apache", xs @ _*) => MergeStrategy.last 
    case PathList("com", "google", xs @ _*) => MergeStrategy.last 
    case PathList("com", "esotericsoftware", xs @ _*) => MergeStrategy.last 
    case PathList("com", "codahale", xs @ _*) => MergeStrategy.last 
    case PathList("com", "yammer", xs @ _*) => MergeStrategy.last 
    case "about.html" => MergeStrategy.rename 
    case "META-INF/ECLIPSEF.RSA" => MergeStrategy.last 
    case "META-INF/mailcap" => MergeStrategy.last 
    case "META-INF/mimetypes.default" => MergeStrategy.last 
    case "plugin.properties" => MergeStrategy.last 
    case "log4j.properties" => MergeStrategy.last 
    case x => old(x) 
    } 
} 

Project.inConfig(Test)(assemblySettings) 

답변

0

좀 더 흔적에게 오류가나요 내 실제 프로그램 일한 build.sbt 만든 : 내가 가진

하나의 문제는 포스트 그레스의 항아리 버전 중복 문제가되었다. 내가 꺼내했다

나는 아직 PostGIS와를 사용하기 시작하지 않았

// "org.postgresql" % "postgresql" % "9.4.1212", //Small gap between Doobie and Spark dependency 
// "org.postgis" % "postgis-jdbc" % "1.3.3", //Causes conflicts 

그리고 PostgreSQL을-8.3-603.jdbc4.jar의 종속성을했다 : 나는 이러한 종속성을 주석하여이를 해결 Postgres의 직접적인 의존성. 작업 build.sbt에서

:

val doobieVersion = "0.4.1" 

libraryDependencies ++= Seq(
    "ch.qos.logback" % "logback-classic" % "1.0.13", //comment and warning go away 
    "ch.qos.logback" % "logback-core" % "1.0.13", 
    "com.citymaps" % "tile-library" % "1.4", 
    "com.fasterxml.jackson.module" %% "jackson-module-scala" % "2.7.2", 
    "com.github.scopt" %% "scopt" % "3.5.0", 
    "com.typesafe.play" %% "play-json" % "2.5.9", 
    "org.apache.spark" %% "spark-core" % sparkVersion % "provided", 
    "org.apache.spark" %% "spark-sql" % sparkVersion % "provided", 
    "org.apache.spark" %% "spark-mllib" % sparkVersion % "provided", 
    "graphframes" % "graphframes" % "0.3.0-spark2.0-s_2.11", 
    "org.clapper" %% "grizzled-slf4j" % "1.3.0", 
// "org.postgresql" % "postgresql" % "9.4.1212", //Small gap between Doobie and Spark dependency 
// "org.postgis" % "postgis-jdbc" % "1.3.3", //Causes conflicts 
    "org.scalatest" %% "scalatest" % "3.0.0" % "test" withSources() withJavadoc(), 
    "org.spire-math" %% "spire" % "0.11.0", 
    "org.tpolecat" %% "doobie-core-cats" % doobieVersion, 
    "org.tpolecat" %% "doobie-postgres-cats" % doobieVersion 
) 

sbt clean 

를 실행 한 후이 작동을 멈췄습니다. postgis-jdbc에 대한 충돌이 있음을 알 수 있습니다. 마지막 버전은 2.2.1이지만 일반 Maven 저장소에서 사용할 수있는 마지막 버전은 1.3.3이며 이전 Postgres 드라이버 Jar에 대한 종속성이 있습니다.

많은 repos에서 보았고 postgis-jdbc 2.2.1을 찾을 수 없습니다.

다운로드 2.2.1 릴리스 https://github.com/postgis/postgis-java

이 릴리스 2.2.2SNAPSHOT로 설정 버전이 있습니다. 따라서 pom.xml 및 jdbc/pom.xml에서 버전 번호를 변경하십시오.

이 명령으로 jar를 빌드하십시오.그것은 메이븐 버전에 대한 까다로운입니다 :

/usr/local/Cellar/maven/3.3.9/bin/mvn install 

지금이 종속성을

resolvers ++= Seq(
    Resolver.mavenLocal 

"net.postgis" % "postgis-jdbc" % "2.2.1", 

을 포함 그리고 드디어 일

sbt assembly 

실행합니다.