我有多个Play Framework 2.3.8项目,这些项目共享一组通用模型和来自不同存储库的其他库文件。这个其他“共享”仓库在开发期间符号链接到每个项目的app
目录中,并在部署之前复制到那里。
我希望在共享仓库中拥有与这组共享库相关联的所有单元测试,这样无论他们在哪个项目中编译它们都会执行它们。但是,因为这些文件都被埋没在app目录,默认情况下在build.sbt中定义为源,项目将无法编译,因为从测试目录的角度定义了包。
结构大致如下:
app/
controllers/
shared -> ../../shared
test/
shared -> ../app/shared/test
我的build.sbt中是否有办法告诉它忽略test
内的app/shared
目录?或者,如果有人对如何构建这个有更好的建议,欢迎任何想法。谢谢!
答案 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中运行测试的某种运行器。