Reputation: 71
We have just upgraded to using sbt 12.2 on our project. I would like to have our tests packaged in separate jars such as: project-unit.jar, project-integration.jar
Our current folder structure is:
src
main
...
test
scala
com.company.unit
com.company.integration
com.company.functional
Any suggestion is very much appreciated.
Thanks
Upvotes: 1
Views: 229
Reputation: 71
I have found a way to do this by:
Create a packaging task for the appropriate test type:
val integrationPackaging = TaskKey[File]("package-integration")
Add package settings to the test settings:
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) }
}
})
}
Note in the create package settings, I had to:
Upvotes: 1