Воспроизведение библиотеки JSON и ошибки объединения сборок sbt - PullRequest
0 голосов
/ 07 февраля 2020

Даже с простой программой Hello, если я добавляю play- json как библиотечную зависимость в файл build.sbt, я всегда получаю ошибку слияния, когда выполняю команду "assembly" в sbt (sbt- плагин сборки).

[error] stack trace is suppressed; run last assembly for the full output
[error] (assembly) deduplicate: different file contents found in the following:
[error] /home/heitor/.cache/coursier/v1/https/repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-annotations/2.10.1/jackson-annotations-2.10.1.jar:module-info.class
[error] /home/heitor/.cache/coursier/v1/https/repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-core/2.10.1/jackson-core-2.10.1.jar:module-info.class
[error] /home/heitor/.cache/coursier/v1/https/repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-databind/2.10.1/jackson-databind-2.10.1.jar:module-info.class
[error] /home/heitor/.cache/coursier/v1/https/repo1.maven.org/maven2/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.10.1/jackson-datatype-jdk8-2.10.1.jar:module-info.class
[error] /home/heitor/.cache/coursier/v1/https/repo1.maven.org/maven2/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.10.1/jackson-datatype-jsr310-2.10.1.jar:module-info.class

MergeApp. scala

object MergeApp extends App {
  println("Hello")
}

build.sbt

name := "MergeBug"

version := "0.1"

scalaVersion := "2.13.1"

val playJsonVersion = "2.8.1"

libraryDependencies ++= Seq("com.typesafe.play" %% "play-json" % playJsonVersion)

project / build.properties

sbt.version = 1.3.8

project / plugins.sbt

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

1 Ответ

2 голосов
/ 07 февраля 2020

Вам необходимо определить собственную стратегию слияния. См. https://github.com/sbt/sbt-assembly#merge -strategy

Поскольку файлы module-info.class полезны только для модулей Java 9+, их можно безопасно удалить:

assemblyMergeStrategy in assembly := {
  case "module-info.class" => MergeStrategy.discard
  case x =>
    val oldStrategy = (assemblyMergeStrategy in assembly).value
    oldStrategy(x)
}
...