[英]How to exclude directory from source in an SBT Play Framework 2.3 project
我有多個Play Framework 2.3.8項目,它們共享一組公共模型和來自不同存儲庫的其他庫文件。 在開發過程中,另一個“共享”存儲庫被符號鏈接到每個項目的app
目錄中,並在部署之前復制到該目錄中。
我想在共享存儲庫中擁有與此共享庫集相關的所有單元測試,以便無論在哪個項目中進行編譯都可以執行它們。但是,由於這些文件隨后全部埋在了app目錄中,它在build.sbt中默認定義為源,因此該項目不會編譯,因為該包是從測試目錄的角度定義的。
結構大致如下所示:
app/
controllers/
shared -> ../../shared
test/
shared -> ../app/shared/test
我的build.sbt中是否有辦法告訴它忽略app/shared
內部的test
目錄? 或者,如果有人對如何構建此結構有更好的建議,則歡迎提出任何想法。 謝謝!
要回答您的第一個問題,即排除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"
設置name := "shared-name"
中的項目的name := "shared-name"
) 。
更好的方法是讓shared
項目成為根項目,而myProject
(以及其他依賴該項目的項目)成為同一構建中的子項目。
對於此類問題,我的解決方案是定義“單元測試JAR”,即類似於junit.jar
的JAR,您可以將其作為測試依賴項添加到項目中,並且其中包含測試支持代碼。
要使用支持代碼,您需要編寫一個擴展單元測試支持代碼的測試,或者在支持JAR中啟動某種運行測試的運行程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.