簡體   English   中英

如何從SBT Play Framework 2.3項目的源中排除目錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM