1

我们刚刚升级到在我们的项目中使用 sbt 12.2。我想将我们的测试打包在单独的 jar 中,例如:project-unit.jar、project-integration.jar

我们当前的文件夹结构是:

src
 main
   ...
 test
   scala
     com.company.unit
     com.company.integration
     com.company.functional

任何建议都非常感谢。

谢谢

4

1 回答 1

1

我找到了一种方法来做到这一点:

  1. 为适当的测试类型创建打包任务:

    val integrationPackaging = TaskKey[File]("package-integration")
    
  2. 将包设置添加到测试设置:

    lazy val integrationTestSettings = createTestSettings("integration", IntegrationTests) ++ createPackageSettings("integration", IntegrationTests, integrationPackaging)
    
    private def createPackageSettings(testType: String, testConfiguration: Configuration, packagingTaskKey: TaskKey[sbt.File]) = {
      inConfig(testConfiguration)(Defaults.testSettings) ++
        Defaults.packageTaskSettings(packagingTaskKey, mappings in (Test, packageBin)) ++
        (artifactName in packagingTaskKey := {(scalaversion, moduleId, artifact) => "%s_%s-%s-%s.jar" format (moduleId.name, scalaversion.binary, buildVersion, testType)}) ++
        (mappings in packagingTaskKey ~= { (ms: Seq[(File,String)]) =>
          ms.filter { case (file, path) =>{ !file.getName.endsWith(".class") || file.getAbsolutePath.contains(testType) }
          }
        })
    }
    

注意在创建包设置中,我必须:

  • 添加默认测试设置以确保继承所有测试设置
  • 添加默认测试包任务设置(使用 Test packageBin 中的映射)
  • 添加 artifactName (你想要的 jar 名称)
  • 为包任务键添加特定的映射(在上面的步骤 1 中创建),这是它的关键,我必须定义一个过滤器,以确保仅具有包含 testType 的路径的文件(例如“集成”、“单元”或“功能”)被选择和资源文件(例如,不以“.class”结尾的文件)
于 2013-05-08T21:38:16.813 回答