2013-04-04 55 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」結尾的文件)