sbt-assembly: Как применить стратегию слияния во время теста: сборка

В моем проекте sbt я готов сгенерировать тестовую банку, содержащую файлы src / test / ..., чтобы я мог повторно использовать их для других проектов.

Я пытаюсь создать эту тестовую банку с помощью этой команды sbt:

sbt test:assembly

В моем build.sbt я предоставляю следующую конфигурацию области Test:

import AssemblyKeys._

...

assemblySettings

Project.inConfig(Test)(assemblySettings)

jarName in (Test, assembly) := s"${name.value}-test-${version.value}.jar"

...

mergeStrategy in (Test, assembly) <<= (mergeStrategy in (Test, assembly)) { (old) =>
 {
  case "ECLIPSEF.RSA" => MergeStrategy.first
  case x => old(x)
 }
}

Эта конфигурация завершается ошибкой со следующей ошибкой:

[warn] Merging 'META-INF\DEPENDENCIES' with strategy 'discard'
java.lang.RuntimeException: deduplicate: different file contents found in the following:
...\.ivy2\cache\org.eclipse.jetty.orbit\javax.transaction\orbits\javax.transaction-1.1.1.v201105210645.jar:META-INF/ECLIPSEF.RSA
...\.ivy2\cache\org.eclipse.jetty.orbit\javax.servlet\orbits\javax.servlet-3.0.0.v201112011016.jar:META-INF/ECLIPSEF.RSA
...\.ivy2\cache\org.eclipse.jetty.orbit\javax.mail.glassfish\orbits\javax.mail.glassfish-1.4.1.v201005082020.jar:META-INF/ECLIPSEF.RSA
...\.ivy2\cache\org.eclipse.jetty.orbit\javax.activation\orbits\javax.activation-1.1.0.v201105071233.jar:META-INF/ECLIPSEF.RSA
        at sbtassembly.Plugin$Assembly$.sbtassembly$Plugin$Assembly$$applyStrategy$1(Plugin.scala:253)
        at sbtassembly.Plugin$Assembly$$anonfun$15.apply(Plugin.scala:270)
        at sbtassembly.Plugin$Assembly$$anonfun$15.apply(Plugin.scala:267)
        at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:251)
        at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:251)
        at scala.collection.Iterator$class.foreach(Iterator.scala:727)
        at scala.collection.AbstractIterator.foreach(Iterator.scala:1157)
        at scala.collection.IterableLike$class.foreach(IterableLike.scala:72)
        ...
[error] (MyProject/test:assembly) deduplicate: different file contents found in the following:
[error] ...\.ivy2\cache\org.eclipse.jetty.orbit\javax.transaction\orbits\javax.transaction-1.1.1.v201105210645.jar:META-INF/ECLIPSEF.RSA
...

Похоже, что конфигурация mergeStrategy игнорируется для области Test (Test, assembly)

Мой вопрос: как настроить build.sbt для включения mergeStrategy для jar, созданного test: assembly?


person Reinis    schedule 08.09.2014    source источник
comment
У меня была такая же проблема. Она была решена stackoverflow.com/questions/25144484/   -  person Alexander    schedule 13.09.2014
comment
@Alexander: Мне очень жаль, но я не понимаю, чем ваш пример отличается от того, что я уже делаю. Моя проблема не связана с невозможностью слияния во время сборки! Моя проблема заключается в том, что невозможно объединить только во время сборки ТЕСТ   -  person Reinis    schedule 17.09.2014


Ответы (1)


По умолчанию проблема с файлом RSA будет исправлена ​​в версии 0.12.0.

Написанная вами стратегия слияния была близка. Ему нужен META-INF как часть шаблона.

mergeStrategy in (Test, assembly) <<= (mergeStrategy in (Test, assembly)) { (old) =>
  {
    case case PathList("META-INF", "ECLIPSEF.RSA") => MergeStrategy.first
    case x => old(x)
  }
}
person Eugene Yokota    schedule 17.11.2014