31 votes

Avertissements lors de la construction d'un projet Scala/Spark avec SBT

J'essaye de construire un projet Scala/Spark dans IntelliJ Idea avec ce qui suit build.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
)

et recevoir un tas d'avertissements :

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 

J'ai plusieurs questions, peut-être stupides, à vous poser :

  1. Y a-t-il une meilleure façon de structurer build.sbt (ajouter d'autres résolveurs, par exemple ?), afin que je puisse me débarrasser des avertissements ?
  2. Devrais-je me soucier des avertissements ?

24voto

Eugeny Loy Points 3803

Est-il une meilleure façon de la structure à construire.sbt (ajouter d'autres résolveurs par exemple?), afin que je puisse vous débarrasser de ces avertissements?

Une façon est d'informer manuellement sbt quelles sont les dépendances que vous préférez, pour votre cas:

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

Je recommande également la lecture sur la gestion des conflits dans le sbt.

Devrais-je me soucier des avertissements à tous?

Dans votre cas - non, puisque vos conflits découlant de l'utilisation des seule étincelle liés à des artefacts publié sous la même version. Spark est un projet avec un grand nombre d'utilisateurs et la possibilité de pot enfer introduite en raison de dépendances transitives est plutôt faible (bien que techniquement pas garanti).

Dans le cas général - peut-être. Généralement, c'est ok, dans la plupart des cas, mais il y a une petite possibilité d'un problème qui pourrait avoir besoin de attention le manuel de résolution des dépendances (si c'est possible). Dans ces cas, il est vraiment difficile de dire si il y a un problème avant d'exécuter votre application et de croiser quelques-uns problème de manque de classe, d'une méthode d'appariement signature de la méthode ou de certains de réflexion liés au problème.

4voto

Sur sbt Spark est normalement répertorié comme un Provided dépendance, c'est-à-dire,

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

Il se peut que vous attiriez des dépendances récursives inutiles et conflictuelles.

1voto

George_K Points 321

Si tout fonctionne bien, vous pouvez désactiver ces avertissements en ajoutant ceci aux paramètres de construction :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X