2017-01-30 7 views
0

私は私のスパークプログラムはこれをやって展開することができますので、ユーバーjarを構築しようとしています:スパーク2のsbtアセンブリの重複除外エラースカラ座2.11.8

ラン:

sbt assembly 

これは、エラーの多くを出力し:Scalaの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を作った:私が持っていた

一つの問題は、Postgresのためのjarバージョンの重複の問題でした。 私はこれらの依存関係をコメントアウトすることによって、これを解決:

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

私はまだのPostGISを使用し始めていなかった、それは私が取る必要があったの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をビルドしてください。これは、Mavenのバージョンについての好き嫌いです:

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

は今、この依存関係

resolvers ++= Seq(
    Resolver.mavenLocal 

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

が含まれ、それが最終的に働いた

sbt assembly 

を実行します。

関連する問題