在我的本地機器上,我有一個常青藤高速緩存已通過在多個項目上工作而被填充。如何測試sbt解析器
使用解析器Y
在項目A
中加載庫X
。在項目B
中使用了相同的庫X
,因爲它位於本地緩存中,所以不會解決此庫的問題。
當我的一位同事加載項目B
時,他得到了庫X
無法解析的錯誤。問題:解析器Y
丟失。
我該如何測試我的sbt項目是否有一套完整的解析程序來解決所有依賴項而不移除常青藤緩存?
在我的本地機器上,我有一個常青藤高速緩存已通過在多個項目上工作而被填充。如何測試sbt解析器
使用解析器Y
在項目A
中加載庫X
。在項目B
中使用了相同的庫X
,因爲它位於本地緩存中,所以不會解決此庫的問題。
當我的一位同事加載項目B
時,他得到了庫X
無法解析的錯誤。問題:解析器Y
丟失。
我該如何測試我的sbt項目是否有一套完整的解析程序來解決所有依賴項而不移除常青藤緩存?
這個命令可以讓你找到,如果你丟失了當前項目的任何更新。請注意,這不會爲您的插件發現任何缺少的解析器。
commands += Command.command("testUpdate") { state =>
val base = baseDirectory.value
val newState = Project
.extract(state)
.append(Seq(ivyPaths := new IvyPaths(base, Some(base/"tmp-cache"))), state)
val (s, _) = Project
.extract(newState)
.runTask(update, newState)
s
}
可以通過之後刪除目錄來擴展它。
恭喜和感謝;)但由於常見約定,我會略微補充一點。 'sbt tasks'列出了一系列可用的任務,這些任務顯示了預定義的任務都使用駱駝套管作爲他們的名字。使用連字符強烈地提醒我使用maven。在名稱中使用連字符可能會在調用build.scala文件中的任務時遇到問題。 –
@isi我根據您的建議更改了名稱。作爲一方不要:小心不要混淆命令和任務。 – EECOLOR
關於你的一面說明:當我正在閱讀你的評論並潛入文檔時,我清楚地知道這不是那麼容易實現的,我發出了一個問題來澄清這一點。 –
我發現一個公然簡單,但也有點hacky,但仍然工作的解決方案。 As described here你可以設置常春藤主目錄。 設置完成後,由於新的緩存目錄,它會引發系統上的sbt實例更新所有依賴關係。 當所有的依賴關係都可以解決時,你可以檢查標準輸出表示成功的字符串。像Done updating.
,然後刪除臨時文件夾。 小心,從頭開始的新決心可能需要一段時間! 〜5分鐘100Mbit/s的,並且使用SSD驅動
代替限定sbt.ivy.home
可變的系統寬,並在一定程度上不可移植的方式我建議使用對環境變量SBT_OPTS
內限定sbt.ivy.home
變量的較少的系統侵入選項您的本地命令/終端會話。在Windows上,如下所示:
C:\Users\isi\Projects\learning\sbt-test-dependencies>SET SBT_OPTS=-Dsbt.ivy.home="C:\path\to\your\temp\directory"
C:\Users\isi\Projects\learning\sbt-test-dependencies>sbt
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0
[info] Loading project definition from C:\Users\isi\Projects\learning\sbt-test-dependencies\project
[info] Updating {file:/C:/Users/isi/Projects/learning/sbt-test-dependencies/project/}sbt-test-dependencies-build...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] downloading https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/com.typesafe.sbteclipse/sbteclipse-plugin/scala_2.10/sbt_0.13/4.0.0/jars/sbteclipse-plugin.jar ...
[info] [SUCCESSFUL ] com.typesafe.sbteclipse#sbteclipse-plugin;4.0.0!sbteclipse-plugin.jar (4783ms)
...
[info] downloading https://jcenter.bintray.com/org/scala-lang/jline/2.10.5/jline-2.10.5.jar ...
[info] [SUCCESSFUL ] org.scala-lang#jline;2.10.5!jline.jar (419ms)
[info] downloading https://jcenter.bintray.com/org/fusesource/jansi/jansi/1.4/jansi-1.4.jar ...
[info] [SUCCESSFUL ] org.fusesource.jansi#jansi;1.4!jansi.jar (325ms)
[info] Done updating.
[info] Set current project to sbt-test-dependencies (in build file:/C:/Users/isi/Projects/learning/sbt-test-dependencies/)/Users/isi/Projects/learning/sbt-test-dependencies/)
輸出可以通過管道輸送到讓說grep
和退出代碼可用於進一步的處理。請注意,以上控制檯輸出是使用交互式sbt
命令生成的,使用非交互式sbt update
命令生成類似的輸出。
另一個更優雅的解決方案是調查SBT來源,如果可以很容易地將此行爲設置爲單獨的任務。必要的步驟可能與my other answer中的步驟相同。從update
任務
sbt.ivy.home
,併爲它提供一個參數過載(如果可能的話)現在有一個可用的SBT插件,名爲SBT dirty money,用於添加解決此問題的其他功能。儘管你必須執行一個額外的命令。
澄清,你的問題:即使你在本地緩存中獲得了必要的依賴關係,你想在項目'B'上看到解析器'Y'丟失了嗎?我對嗎? –
如果我正確理解了你的話,你需要類似'sbt update'任務([成爲默認任務列表的一部分](http://www.scala-sbt.org/0.13/docs/Howto-Inspect- the-Build.html#List + available + tasks)),但明確地告訴'sbt'不要使用任何緩存來解決依賴關係。在SNAPSHOT依賴關係上,這似乎是默認情況下[給出此答案](http://stackoverflow.com/a/24510450/3165552)的情況。第一條評論還指出,可以通過依賴聲明站點上的可選「def changing()」來緩解這種限制。 –
您可以按照[本答案]的建議檢查[緩存和解決方案](http://www.scala-sbt.org/0.13/docs/Dependence-Management-Flow.html#Caching+and+Configuration)選項, (http://stackoverflow.com/a/26655891/3165552) –