2
votes

L'assemblage sbt échoue en raison d'un contenu de fichier différent trouvé

J'essaye de créer un projet dans GitLab. Dans gitlab-ci.yml, j'ai exécuté l'assembly sbt et rencontré une exception ennuyeuse.

[info] Merging files...
[warn] Merging 'NOTICE' with strategy 'rename'
[warn] Merging 'README' with strategy 'rename'
[warn] Merging 'META-INF/NOTICE.txt' with strategy 'rename'
[warn] Merging 'license/NOTICE' with strategy 'rename'
[warn] Merging 'META-INF/NOTICE' with strategy 'rename'
[warn] Merging 'org/xerial/snappy/native/README' with strategy 'rename'
[warn] Merging 'license' with strategy 'rename'
[warn] Merging 'license/LICENSE' with strategy 'rename'
[warn] Merging 'META-INF/license' with strategy 'rename'
[warn] Merging 'META-INF/LICENSE.txt' with strategy 'rename'
[warn] Merging 'LICENSE.txt' with strategy 'rename'
[warn] Merging 'META-INF/LICENSE' with strategy 'rename'
[warn] Merging 'LICENSE' with strategy 'rename'
[warn] Merging 'META-INF/DEPENDENCIES' with strategy 'discard'
[warn] Merging 'META-INF/INDEX.LIST' with strategy 'discard'
[warn] Merging 'META-INF/MANIFEST.MF' with strategy 'discard'

J'ai essayé de suivre les instructions dans sbt-assembly: erreur de déduplication trouvée , et il semble que la stratégie MergeStrategy soit en place, mais l'exception demeure:

[error] (soda/*:assembly) deduplicate: different file contents found in the following:
[error] /root/.ivy2/cache/io.netty/netty-buffer/jars/netty-buffer-4.0.42.Final.jar:META-INF/io.netty.versions.properties
[error] /root/.ivy2/cache/io.netty/netty-common/jars/netty-common-4.0.42.Final.jar:META-INF/io.netty.versions.properties
[error] /root/.ivy2/cache/io.netty/netty-codec-http/jars/netty-codec-http-4.0.42.Final.jar:META-INF/io.netty.versions.properties
[error] /root/.ivy2/cache/io.netty/netty-codec/jars/netty-codec-4.0.42.Final.jar:META-INF/io.netty.versions.properties
[error] /root/.ivy2/cache/io.netty/netty-transport/jars/netty-transport-4.0.42.Final.jar:META-INF/io.netty.versions.properties
[error] /root/.ivy2/cache/io.netty/netty-handler/jars/netty-handler-4.0.42.Final.jar:META-INF/io.netty.versions.properties
[error] /root/.ivy2/cache/io.netty/netty-transport-native-epoll/jars/netty-transport-native-epoll-4.0.42.Final-linux-x86_64.jar:META-INF/io.netty.versions.properties


0 commentaires

3 Réponses :


0
votes

Regardé partout n'a pas pu trouver de résolution. Vérifiez la résolution suivante si cela fonctionne pour vous, cela n'a pas fonctionné pour moi: https://github.com/sbt/sbt-assembly/issues/297


2 commentaires

Si ce n'est pas une solution, pourquoi l'afficher?


Je l'ai essayé aussi, mais il échoue toujours avec la même erreur. Quoi qu'il en soit, merci d'avoir répondu.



0
votes

Une fois, j'ai eu un problème similaire avec certains packages Java et log4j, ce que j'ai fait a été de créer une stratégie de fusion personnalisée dans laquelle je n'ai choisi que la première occurrence. Peut-être que vous pouvez adapter ce code pour qu'il fonctionne pour vous:

 case PathList("io", "netty", xs @ _*)        =>
 //   println(s"$xs")
    MergeStrategy.first

Peut-être si vous changez

 case PathList("org", "apache", "commons", xs @ _*)        =>
 //   println(s"$xs")
    MergeStrategy.first

vos packages problématiques ( netty ) vous parvenez à le résoudre:

assemblyMergeStrategy in assembly := {
//  case PathList("javax", "servlet", xs @ _*)         => MergeStrategy.first
  case PathList("org", "apache", "commons", xs @ _*)        =>
 //   println(s"$xs")
    MergeStrategy.first
  case PathList(ps @ _*) if ps.last endsWith ".html" => MergeStrategy.first
  case "application.conf"                            => MergeStrategy.concat
  case "log4j.properties"                            => MergeStrategy.first
  case "unwanted.txt"                                => MergeStrategy.discard
  case x =>
    val oldStrategy = (assemblyMergeStrategy in assembly).value
    oldStrategy(x)
}


2 commentaires

Merci pour votre réponse, mais cela n'a pas aidé. Le lien que j'ai joint suggère quelque chose d'assez similaire: assemblyMergeStrategy in assembly: = {case PathList ("META-INF", xs @ _ *) => MergeStrategy.discard case x => MergeStrategy.first} de toute façon, j'ai aussi essayé votre suggestion.


Il est un peu délicat de résoudre ce type de problèmes, du moins d'après mon expérience.



0
votes

J'ai finalement trouvé une solution de contournement à ce problème. Puisqu'il s'agit d'un projet de jeu, je pourrais utiliser l'activateur pour l'envelopper et créer un package. J'ai utilisé le code suivant pour créer le package: wget https://downloads.typesafe.com /typesafe-activator/1.3.7/typesafe-activator-1.3.7.zip && décompressez typesafe-activator-1.3.7.zip 1> / dev / null activator-dist-1.3.7 / activator -Dsbt.log.noformat = true -java-home /usr/lib/jvm/java-1.8-openjdk package clean compile test dist


0 commentaires