Конфликтующие файлы при создании uber-jar в SBT с использованием sbt-assembly

Я пытаюсь скомпилировать и упаковать толстую банку с помощью SBT, и я продолжаю сталкиваться со следующей ошибкой. Я перепробовал все, от использования исключения зависимости библиотеки до слияния.

[trace] Stack trace suppressed: run last *:assembly for the full output.
[error] (*:assembly) deduplicate: different file contents found in the     following:
[error] /Users/me/.ivy2/cache/org.slf4j/slf4j-api/jars/slf4j-api-1    .7.10.jar:META-INF/maven/org.slf4j/slf4j-api/pom.properties
[error] /Users/me/.ivy2/cache/com.twitter/parquet-format/jars/parquet-format-2.2.0-rc1.jar:META-INF/maven/org.slf4j/slf4j-api/pom.properties
[error] Total time: 113 s, completed Jul 10, 2015 1:57:21 AM

Текущее воплощение моего файла build.sbt показано ниже:

import AssemblyKeys._

assemblySettings

name := "ldaApp"

version := "0.1"

scalaVersion := "2.10.4"

mainClass := Some("myApp")

libraryDependencies +="org.scalanlp" %% "breeze" % "0.11.2"

libraryDependencies +="org.scalanlp" %% "breeze-natives" % "0.11.2"

libraryDependencies += "org.apache.spark" % "spark-mllib_2.10" % "1.3.1"

libraryDependencies +="org.ini4j" % "ini4j" % "0.5.4"

jarName in assembly := "myApp"

net.virtualvoid.sbt.graph.Plugin.graphSettings

libraryDependencies += "org.slf4j" %% "slf4j-api"" % "1.7.10" % "provided"

Я понимаю, что делаю что-то не так... Я просто понятия не имею, что.


person Ego    schedule 10.07.2015    source источник
comment
что так бесит? Вы пытаетесь создать толстую банку, и в пути к классам есть дубликаты. Я думаю, для сборки sbt есть возможность игнорировать дубликаты   -  person vitalii    schedule 10.07.2015
comment
см. здесь stackoverflow.com/questions/25144484/   -  person vitalii    schedule 10.07.2015
comment
@ user405887: почему бы не включить (в свой вопрос) то, что вы уже пробовали? Таким образом, люди, которые пытаются думать вместе, не предложат вам такой вариант. Я не вижу здесь ловкости, пожалуйста, примите на себя добросовестность.   -  person Martijn Pieters    schedule 12.07.2015


Ответы (2)


Вот как вы можете справиться с этими проблемами слияния.

import sbtassembly.Plugin._

lazy val assemblySettings = sbtassembly.Plugin.assemblySettings ++ Seq(
    publishArtifact in packageScala := false, // Remove scala from the uber jar
    mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) =>
        {
            case PathList("META-INF", "CHANGES.txt") => MergeStrategy.first
            // ...
            case PathList(ps @ _*) if ps.last endsWith "pom.properties" => MergeStrategy.first
            case x => old(x)
        }
    }
)

Затем добавьте эти настройки в свой проект.

lazy val projectToJar = Project(id = "MyApp", base = file(".")).settings(assemblySettings: _*)
person marios    schedule 11.07.2015

Я запустил вашу сборку сборки, удалив spark из толстой банки (mllib уже включен в spark ).

libraryDependencies += "org.apache.spark" %% "spark-mllib" % "1.3.1" % "provided"

Как сказал Виталий в комментарии, это решение уже было здесь. Я понимаю, что тратить часы на решение проблемы, не находя решения, может быть неприятно, но, пожалуйста, будьте любезны.

person David Duponchel    schedule 11.07.2015