![](/img/trans.png)
[英]sbt: In a multi-project build, how to invoke project B's task from project A?
[英]If I have an SBT multi-project build, how can I make A's test dependencies not leak in to B's tests
因此,我有一個包含模塊A和B的SBT項目。
在我看來,這種失敗是無效的,因為A的測試不依賴於B的測試。
我正在使用
A.dependsOn(B % "compile->compile;test->compile")
含義
難道我做錯了什么?
這是實際的構建文件 。 相關項目是doobieSupport23
取決於core
這是構建錯誤 。 您可以看到它在構建中加入了scalaz 7.2,但是應該只在拉入scalaz 7.1.6。
問題絕對不是在彼此依賴的項目中,在我看來,配置"compile->compile;test->compile"
對於您需要實現的目標是完全有效的。
造成此問題的原因是,由於A依賴於B而共享了libraryDependencies
。幸運的是,sbt可以非常精確地管理依賴關系。
最簡單的建議是將沖突依賴的更新版本應用到盡可能小的范圍內-這意味着,如果僅在核心測試中需要scalaz 7.2.0,那就這樣吧!
lazy val core = project(...)
.settings(libraryDependencies in Test += "org.scalaz" %% "scalaz" % "7.2.0")
lazy val doobieSupport23 = project(...).dependsOn(core)
.settings(libraryDependencies in Test += "org.scalaz" %% "scalaz" % "7.1.6")
如果由於較新版本實際上已在其他內核的依賴項中使用而使它無法工作,則可以使用以下技巧:
val scalazOld = "org.scalaz" %% "scalaz" % "7.1.6"
val scalazNew = "org.scalaz" %% "scalaz" % "7.2.0"
lazy val core = project(...)
.settings(libraryDependencies += "org.scalaz" %% "scalaz" % "7.2.0")
lazy val doobieSupport23 = project(...).dependsOn(core)
.settings(
libraryDependencies in Test += "org.scalaz" %% "scalaz" % "7.1.6" force()
)
注意force()
組合器。 我不確定以這種方式它不會在運行時因類路徑中的類不兼容而失敗。
我在問題中指定的內容完全符合預期。
問題最終是我的構建文件有一個剛剛掩蓋的無關項。 這種依賴性導致doobie 3.0被拉到我只期望doobie 2.3的位置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.