2013-04-04 33 views
1

我们刚刚升级到在我们的项目上使用sbt 12.2。我想在不同的瓶子,如已经打包我们的测试:项目unit.jar,项目integration.jarsbt为不同的测试类型包装单独的罐子

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

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

任何建议是非常赞赏。

感谢

回答

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) } 
         } 
        }) 
    } 
    
  3. 在创建包设置,我不得不

注:

  • 添加默认的测试设置,以确保所有的测试设置(在测试packageBin使用映射)继承
  • 添加默认的测试包任务设置
  • add artifactName(你想要的jar名称)
  • 为包任务键添加特定映射(在上面的第1步中创建),这是关键,我必须定义一个筛选器,以确保只有文件包含testType的路径(例如。 “集成”,“单元”或“功能”)并且资源文件(例如,不以“.class”结尾的文件)