当前位置: 首页 > 知识库问答 >
问题:

SBT-Assembly:如何在测试:Assembly期间应用合并策略

范承教
2023-03-14

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

sbt test:assembly
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
...

共有1个答案

乐正远航
2023-03-14

默认情况下,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)
  }
}
 类似资料:
  • 我有一个使用spark的scala多项目,并尝试使用sbt插件sbt-assembly 0.14.3来制作一个胖罐子。我的建筑。SBT看起来像这样: 我想创建一个子项目的fat jar,以便这个fat jar包含项目核心的所有库和代码。我尝试了以下方法:

  • 我尝试安装sbt-assembly来使用我所有的scala文件及其依赖项创建jar文件。 我已经安装了sbt(shell中的命令“sbt sbt-version”给出了以下版本:0.13.9)。我从Github存储库(https://Github.com/sbt/sbt-assembly)下载了sbt-assembly并将其解压到一个文件夹中。 如果有人知道我做错了什么,那会很有帮助的。 谢了!

  • Solidity定义了一个汇编语言,可以不同Solidity一起使用。这个汇编语言还可以嵌入到Solidity源码中,以内联汇编的方式使用。下面我们将从内联汇编如何使用着手,介绍其与独立使用的汇编语言的不同,最后再介绍这门汇编语言。 文档尚待完善的补充的地方:待补充内联汇编的变量作用域的不同,尤其是使用含internal的函数的库时所引入的复杂度。另外,还需补充,编译器定义的符号(symbols)

  • .NET Assembly 能显示 .NET 程序集的详细信息: 1) 编译模式调试/发布 2) .NET Assembly 全称 3) .NET Assembly 递归引用

  • 本文向大家介绍Assembly介绍,包括了Assembly介绍的使用技巧和注意事项,需要的朋友参考一下 示例 汇编语言是机器语言或机器代码的一种人类可读形式,它是处理器逻辑在其上操作的位和字节的实际序列。通常,与二进制,八进制或十六进制相比,人类用助记符进行阅读和编程更为容易,因此人类通常以汇编语言编写代码,然后使用一个或多个程序将其转换为处理器可以理解的机器语言格式。 例: 汇编程序是一种程序,

  • 解决Spring Boot项目打包成jar包后,不方便修改配置文件,减少默认的第三方依赖等问题 该项目演示了使用maven-assembly-plugin等插件打包后,分离配置文件和第三方依赖jar包 spring-boot-assembly项目打包后,就像操作tomcat一样,可使用脚本启动停止服务,在logs文件夹中会记录启动和运行日志 spring-boot-assembly 在spring