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
3 Réponses :
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
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.
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) }
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.
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