sbt-assembly包括测试类

gil*_*cu2 3 scala sbt sbt-assembly

我遵循sbt-assembly:包括来自https://github.com/sbt/sbt-assembly中描述的配置的测试类,可以正常进行组装

当我加载sbt时,我得到

assembly.sbt:5: error: reference to jarName is ambiguous;
it is imported twice in the same scope by
import sbtassembly.AssemblyKeys._
and import _root_.sbtassembly.AssemblyPlugin.autoImport._
jarName in (Test, assembly) := s"${name.value}-test-${version.value}.jar"
^
Run Code Online (Sandbox Code Playgroud)

因此,我注释了导入行并运行sbt:assembly,但它开始测试,但不生成任何-test- .jar。

有谁知道如何生成包含测试类的jar?谢谢

Mat*_*tin 5

我必须删除此行(我认为它现在已基于https://github.com/sbt/sbt-assembly/blob/546d200477b64e2602beeb65bfa04306122cd9f5/Migration.md自动导入)

import sbtassembly.AssemblyKeys._
Run Code Online (Sandbox Code Playgroud)

我将其余的(即下面的两行)添加到build.sbt而不是assembly.sbt

Project.inConfig(Test)(baseAssemblySettings)
jarName in (Test, assembly) := s"${name.value}-test-${version.value}.jar"
Run Code Online (Sandbox Code Playgroud)

完成这些步骤后,test:assembly确实为我生成了一个测试jar,但是我希望jar只包含测试类(类似于test:package),但它似乎也包括非测试类。换句话说,如果我有src / main / scala / Foo.scalasrc / test / scala / FooTest.scala,那么我认为test:assembly生成的jar 只包含FooTest.class,但它似乎也包含Foo .class。希望这对您来说不是问题,因为我不确定如何解决该问题。

编辑:如果您想让jar仅包含src / test中的类(就像我所做的那样),则可以将以下内容添加到build.sbt中,以过滤掉可能在类路径中的所有其他内容:

fullClasspath in (Test, assembly) := {
  val cp = (fullClasspath in (Test, assembly)).value
  cp.filter({x => x.data.getPath.contains("test-classes")})
}
Run Code Online (Sandbox Code Playgroud)