2017-08-06 10 views
25

とスカラ/スパークプロジェクトを構築している間、私は、次のbuild.sbtとIntelliJのアイデアでスカラ/スパークプロジェクトをビルドしようとしている:警告SBT

name := "try" 

version := "1.0" 

scalaVersion := "2.11.8" 

val sparkVersion = "2.2.0" 

resolvers ++= Seq(
    "apache-snapshots" at "http://repository.apache.org/snapshots/" 
) 

libraryDependencies ++= Seq(
    "org.apache.spark" %% "spark-core" % sparkVersion, 
    "org.apache.spark" %% "spark-sql" % sparkVersion, 
    "org.apache.spark" %% "spark-mllib" % sparkVersion, 
    "org.apache.spark" %% "spark-streaming" % sparkVersion, 
    "org.apache.spark" %% "spark-hive" % sparkVersion 
) 

と警告の束を得る:

8/6/17 
1:29 PM SBT project import 
       [warn] Found version conflict(s) in library dependencies; some are suspected to be binary incompatible: 
       [warn] * io.netty:netty:3.9.9.Final is selected over {3.6.2.Final, 3.7.0.Final} 
       [warn]  +- org.apache.spark:spark-core_2.11:2.2.0    (depends on 3.9.9.Final) 
       [warn]  +- org.apache.zookeeper:zookeeper:3.4.6    (depends on 3.6.2.Final) 
       [warn]  +- org.apache.hadoop:hadoop-hdfs:2.6.5    (depends on 3.6.2.Final) 
       [warn] * commons-net:commons-net:2.2 is selected over 3.1 
       [warn]  +- org.apache.spark:spark-core_2.11:2.2.0    (depends on 2.2) 
       [warn]  +- org.apache.hadoop:hadoop-common:2.6.5    (depends on 3.1) 
       [warn] * com.google.guava:guava:11.0.2 is selected over {12.0.1, 16.0.1} 
       [warn]  +- org.apache.hadoop:hadoop-yarn-client:2.6.5   (depends on 11.0.2) 
       [warn]  +- org.apache.hadoop:hadoop-yarn-api:2.6.5   (depends on 11.0.2) 
       [warn]  +- org.apache.hadoop:hadoop-yarn-common:2.6.5 

私はいくつかの、おそらくダム、質問があります。

  1. build.sbtを構造化するためのより良い方法はあります(Oを追加どのような解決者ですか?)、私は警告を取り除くことができるように?
  2. 警告を気にする必要はありますか?

答えて

18

私は警告をオフに取り除くことができるように、(例えば?他のリゾルバを追加)build.sbtを構造化するためのより良い方法はありますか?

一つの方法として手動であなたのケースのために、あなたが好む依存関係何SBT伝えることです:

dependencyOverrides ++= Set(
    "io.netty" % "netty" % "3.9.9.Final", 
    "commons-net" % "commons-net" % "2.2", 
    "com.google.guava" % "guava" % "11.0.2" 
) 

私もconflict management in sbtについて読んでお勧めします。

私は警告を気にする必要がありますか?

あなたのケースでは、あなたの競合は、同じバージョンでリリースされたスパーク関連の成果物のみを使用しているからです。 Sparkは大きなユーザベースを持つプロジェクトであり、過渡的な依存関係のためにjar hellが導入される可能性は低いです(ただし、技術的には保証されません)。

一般的には - 多分。通常はほとんどの場合大丈夫ですが、慎重な手動の依存関係の解決が必要な場合があります(これが可能な場合)。このような場合、アプリを実行する前に問題があるかどうかを知ることは難しく、クラス、メソッド、不一致のメソッドのシグネチャ、またはリフレクション関連の問題のような問題にぶつかります。

sbt
+0

良い答えを。私はまた、そのような警告に遭遇するたびに、いくつかのlib作成者がそのような警告を生成する方法でlib依存関係を宣言するのはなぜだろうかと思います。私がこれを見ると、「皆さん、SBTであなた自身のプロジェクトを作ろうとしましたか?これらの警告を見たことがありませんか? :) –

+0

@Eugene努力してくれてありがとう、しかし私のSBTはまだ失敗しています(UPDATEのログを見てください)。何か案は? –

+3

@SergeyBushmanov: '' io.netty "%" netty "%" 3.9.9.Final "'を使い、 'sbt'コンソールで' reload'と 'update'を実行します。 – chunjef

4

、スパークが正常Provided依存性として記載されている、すなわち、

"org.apache.spark" %% "spark-core" % sparkVersion % Provided 

あなたが不要と競合再帰的依存関係に引っ張ることができます。

1

すべてが正常に動作している場合は、設定を構築し、これを追加することにより、これらの警告を無効にできます。

evictionWarningOptions in update := EvictionWarningOptions.default 
.withWarnTransitiveEvictions(false)