5
votes

Erreur d'assemblage sbt: déduplication: contenu de fichier différent trouvé dans io.netty.versions.properties

J'ai ajouté le fichier jar suivant au fichier build.sbt comme suit:

addSbtPlugin("io.spray" % "sbt-revolver" % "0.7.2")

addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.5.0")

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.9")

addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.0.1")

addSbtPlugin("com.scalapenos" % "sbt-prompt" % "0.2.1")

addSbtPlugin("com.timushev.sbt" % "sbt-updates" % "0.1.10")

addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.8.0")

addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "4.0.0")

Postez ceci, pendant la fusion, j'obtiens l'erreur suivante: p>

    excludeDependencies ++= Seq(
      SbtExclusionRule("io.netty", "netty-codec-http"),
      SbtExclusionRule("io.netty", "netty-codec"),
      SbtExclusionRule("io.netty", "netty-handler"),
      SbtExclusionRule("io.netty", "netty-transport"),
      SbtExclusionRule("io.netty", "netty-resolver"),
      SbtExclusionRule("io.netty", "netty-buffer"),
      SbtExclusionRule("io.netty", "netty-common")
    )

J'ai essayé de nombreuses solutions de contournement fournies pour cela comme:

1) a ajouté cette ligne dans assemblyMergeStrategy dans build. sbt : case PathList ("io",  "netty", xs @ _ *) =>  MergeStrategy.discard (essayé avec .last et .first )

2) a ajouté cette ligne dans assemblyMergeStrategy dans build.sbt : case "META-INF \\ io.netty.versions.properties " => MergeStrategy.first (essayé avec .last et .discard)

3) ajout de règles d'exclusion SBT pour les pots netty erronés dans les dépendances exclues comme ci-dessous:

 [error] 1 error was encountered during merge
java.lang.RuntimeException: deduplicate: different file contents found in the following:
/home/jenkins-slave/.ivy2/cache/io.netty/netty-codec-http/jars/netty-codec-http-4.1.17.Final.jar:META-INF/io.netty.versions.properties
/home/jenkins-slave/.ivy2/cache/io.netty/netty-handler/jars/netty-handler-4.1.17.Final.jar:META-INF/io.netty.versions.properties
/home/jenkins-slave/.ivy2/cache/io.netty/netty-codec/jars/netty-codec-4.1.17.Final.jar:META-INF/io.netty.versions.properties
/home/jenkins-slave/.ivy2/cache/io.netty/netty-transport/jars/netty-transport-4.1.17.Final.jar:META-INF/io.netty.versions.properties
/home/jenkins-slave/.ivy2/cache/io.netty/netty-resolver/jars/netty-resolver-4.1.17.Final.jar:META-INF/io.netty.versions.properties
/home/jenkins-slave/.ivy2/cache/io.netty/netty-buffer/jars/netty-buffer-4.1.17.Final.jar:META-INF/io.netty.versions.properties
/home/jenkins-slave/.ivy2/cache/io.netty/netty-common/jars/netty-common-4.1.17.Final.jar:META-INF/io.netty.versions.properties
    at sbtassembly.Assembly$.applyStrategies(Assembly.scala:143)
    at sbtassembly.Assembly$.x$1$lzycompute$1(Assembly.scala:25)
    at sbtassembly.Assembly$.x$1$1(Assembly.scala:23)
    at sbtassembly.Assembly$.stratMapping$lzycompute$1(Assembly.scala:23)
    at sbtassembly.Assembly$.stratMapping$1(Assembly.scala:23)...........

et de nombreuses variantes de ce qui précède.Aucune de ces solutions ne fonctionne. P >

plugins.sbt ressemble à ci-dessous:

"com.amazonaws" % "aws-java-sdk" % "1.11.492"

Veuillez nous le conseiller.


2 commentaires

Avez-vous essayé "com.amazonaws"% "aws-java-sdk"% "1.11.492" excludeAll ExclusionRule (organization = "io.netty") ? Dans notre version, il s'agit du cas "META-INF / io.netty.versions.properties" => MergeStrategy.first btw


Merci @ariskk, j'ai essayé et cela a fonctionné !!!


4 Réponses :


5
votes

Vous pouvez essayer ci-dessous:

case x if x.contains("versions.properties") => MergeStrategy.discard

ou dans le pire des cas

assemblyMergeStrategy in assembly := {
      case x if x.contains("io.netty.versions.properties") => MergeStrategy.discard
      case x =>
        val oldStrategy = (assemblyMergeStrategy in assembly).value
        oldStrategy(x)
}



0 commentaires

1
votes

Si vous vérifiez le contenu du fichier, vous pouvez voir que chaque jar a des valeurs différentes, donc pour être correct dans l'assemblage, vous avez concaté ces fichiers pour conserver toutes les propriétés qu'ils contiennent. Utilisez case "META-INF / io.netty.versions.properties" => MergeStrategy.concat dans la stratégie.


0 commentaires

0
votes

Après avoir recherché une solution au problème, j'ai trouvé ce problème sur le référentiel sbt-assembly .

Il contient la solution de contournement suivante qui a résolu le problème pour moi:

Cela fonctionne lorsque la dépendance externe est remplacée par une version antérieure de la bibliothèque aws, "com.amazonaws"% "aws-java-sdk"% "1.11.80" , car celle-ci ne contient aucun doublon de META-INF / io.netty.versions.properties .

Je peux imaginer que cela ne fonctionne pas pour ceux qui ont besoin de la toute dernière version, mais c'est au moins quelque chose.


0 commentaires

0
votes

Je pense que vous obtenez cette erreur en raison de la disponibilité de plusieurs versions. Pour éviter cela, vous pouvez essayer l'extrait ci-dessous dans votre build.sbt et essayer.

assemblyShadeRules in assembly: = Seq (ShadeRule.rename ("shapeless. **" -> "new_shapeless. @ 1"). inAll)


0 commentaires