如何在SBT Play Framework 2.3项目中从源中排除目录

时间:2015-03-10 15:52:24

标签: java build playframework sbt playframework-2.3

我有多个Play Framework 2.3.8项目,这些项目共享一组通用模型和来自不同存储库的其他库文件。这个其他“共享”仓库在开发期间符号链接到每个项目的app目录中,并在部署之前复制到那里。

我希望在共享仓库中拥有与这组共享库相关联的所有单元测试,这样无论他们在哪个项目中编译它们都会执行它们。但是,因为这些文件都被埋没在app目录,默认情况下在build.sbt中定义为源,项目将无法编译,因为从测试目录的角度定义了包。

结构大致如下:

app/
  controllers/
  shared -> ../../shared
test/
  shared -> ../app/shared/test

我的build.sbt中是否有办法告诉它忽略test内的app/shared目录?或者,如果有人对如何构建这个有更好的建议,欢迎任何想法。谢谢!

2 个答案:

答案 0 :(得分:2)

要回答您的第一个问题,请排除test

excludeFilter in (Compile, unmanagedSources) := {
  val testDir = ((sourceDirectory in Compile).value / "shared" / "test").getCanonicalPath
  HidderFileFilter | SimpleFileFilter(_.getCanonicalPath.startsWith(testDir))
}

要回答第二个问题,更好的方法是使用项目引用:

lazy val shared = ProjectRef(file("../shared"), "shared-name")

lazy val myProject = (project in file(".")).dependsOn(shared)

在此设置中,../shared是一个独立的版本,它可以自己发布build.sbt等,shared-name是名称(name := "shared-name"设置该构建中的项目)。

更好的方法是让shared项目成为根项目,myProject(以及依赖它的其他项目)是同一构建中的子项目。

答案 1 :(得分:1)

我对这类问题的解决方案是定义一个"单元测试JAR",即一个类似于junit.jar的JAR,你可以将它作为测试依赖项添加到你的项目中包含测试的支持代码。

要使用支持代码,您需要编写一个扩展单元测试支持代码的测试,或者启动在支持JAR中运行测试的某种运行器。