Разрешение зависимостей для eclipselink путем создания толстой банки с помощью sbt и sbt-assembly?

Я пытаюсь создать толстую банку с плагином sbt и sbt-assembly для своего проекта на Scala и EclipseLink JPA, но команда сборки не удалась, потому что файл eclipse.inf будет найден дважды.

> assembly
[info] Including from cache: commonj.sdo-2.1.1.jar
[info] Including from cache: javax.persistence-2.1.0.jar
[info] Including from cache: scala-library.jar
[info] Including from cache: eclipselink-2.5.1.jar
[info] Run completed in 38 milliseconds.
[info] Checking every *.class/*.jar file's SHA-1.
[info] Merging files...
[warn] Merging 'org\eclipse\persistence\descriptors\copying' with strategy 'rename'
[warn] Merging 'META-INF\MANIFEST.MF' with strategy 'discard'
[trace] Stack trace suppressed: run last *:assembly for the full output.
[error] (*:assembly) deduplicate: different file contents found in the following:
[error] C:\Users\u987\WebApps\gr\lib_managed\jars\org.eclipse.persistence\javax.persistence\jav    ax.persistence-2.1.0.jar:META-INF/eclipse.inf 
[error] C:\Users\u987\WebApps\gr\lib_managed\jars\org.eclipse.persistence\commonj.sdo\commonj.sdo-2.1.1.jar:META-INF/eclipse.inf

Мой build.sbt выглядит так:

import AssemblyKeys._

name := "TelegramReceiver"

version := "0.1"

scalaVersion := "2.10.3"

retrieveManaged in ThisBuild := true

libraryDependencies ++= Seq(
  "org.scalatest" % "scalatest_2.10" % "2.0" % "test",
  "org.eclipse.persistence" % "eclipselink" % "2.5.1" 
)

Пытаюсь решить проблему с помощью mergeStrategy из плагина сборки sbt, но не получается. Я использую сбт 0.13.1.

Заранее спасибо за помощь!


person Twistleton    schedule 18.02.2014    source источник
comment
Не могли бы вы привести пример вашей стратегии слияния и желаемого результата. У вас есть eclipse.inf с точно таким же содержимым, если нет, то какое из них вы хотите сохранить?   -  person yǝsʞǝla    schedule 18.02.2014


Ответы (1)


Вы можете добавить в свои настройки собственную стратегию слияния, например:

  mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) =>
  {
    case PathList("eclipse.inf") => MergeStrategy.rename // use any of the available strategies like `first`
    case x => old(x)
  }}

Дополнительные сведения см. в этом документе.

person yǝsʞǝla    schedule 18.02.2014
comment
Спасибо за быстрый ответ. Я пробую это: case PathList(eclipse.inf) => MergeStrategy.first, но получаю ту же ошибку. Я не уверен, соответствует ли содержимое PathList имени файла? - person Twistleton; 18.02.2014
comment
Ваш файл не находится в корне банки: case "META-INF/eclipse.inf" или, может быть, case PathList("META-INF", "eclipse.inf") должно работать лучше. - person gourlaysama; 18.02.2014
comment
Большое спасибо, Алексей Измайлов и gourlaysama - вы меня спасли. - person Twistleton; 18.02.2014
comment
Я рад, что это сработало, и это было хорошим замечанием @gourlaysama относительно пути. - person yǝsʞǝla; 19.02.2014