sbt程序集:如何在测试期间应用合并策略:程序集



在我的sbt项目中,我愿意生成包含src/test/文件,以便我可以在其他项目中重复使用它们。

我试图用sbt命令生成这个测试jar:

sbt test:assembly

在我的build.sbt中,我提供了以下测试范围配置:

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]将"META-INF\DEPENDENCIES"与策略"丢弃"合并java.lang.RuntimeException:重复数据消除:在以下内容中找到不同的文件内容:…\.ivy2\cache\org.eclipse.jjetty.rorbit\javax.transaction\orbits\javax.transaction 1.1.1.v201105210645.jar:META-INF/ECLIPSEF.RSA…\.ivy2\cache\org.eclipse.japty.orbit\javax.servlet\orbits\javax.servlets-3.0.0.v201112011016.jar:META-INF/ECLIPSEF.RSA…\.ivy2\cache\org.eclipse.japty.orbit\javax.mail.glassfish\orbits\javax.mail·格lassfish-1.4.1.v201005082020.jar:META-INF/ECLIPSEF.RSA…\.ivy2\cache\org.eclipse.japty.orbit\javax.activation\orbits\javax.activation-1.1.0.v201105071233.jar:META-INF/ECLIPSEF.RSA在sbtassembly。插件$Assembly$.sbtassembly$Plugin$Assembly$$applyStrategy$1(Plugin.scala:253)在sbtassembly。插件$Assembly$$anonfun$15.apply(插件.scala:270)在sbtassembly。插件$Assembly$$anonfun$15.apply(插件.scala:267)在scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLeke.scala:251)在scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLeke.scala:251)位于scala.collection.Iterator$class.foreach(Iterator.scala:727)位于scala.collection.AbstractIterator.foreach(Iterator.scala:1157)位于scala.collection.IterableLike$class.foreach(IterableLike.scala:72)。。。[error](MyProject/test:assembly)重复数据消除:在以下文件中找到不同的文件内容:[error]…\。ivy2\cache\org.eclipse.japty.orbit\javax.transaction\orbits\javax.transaction 1.1.1.v201105210645.jar:META-INF/ECLIPSEF.RSA。。。

似乎忽略了测试范围(测试、组装)的合并策略配置

我的问题是-如何配置build.sbt以为测试生成的jar启用合并策略:assembly

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)
  }
}

相关内容

最新更新