簡體   English   中英

如何測試sbt解析器

[英]How to test sbt resolvers

在我的本地機器上,我有一個常春藤緩存,已經通過處理多個項目來填充。

使用項目A解析程序Y加載庫X 項目B使用了相同的庫X ,解析此庫沒有問題,因為它位於我的本地緩存中。

當我的一個同事加載項目B他得到了庫X無法解決的錯誤。 問題:解析器Y丟失了。

如何在不刪除常春藤緩存的情況下測試我的sbt項目是否有一套完整的解析器來解析所有依賴項?

另一個更優雅的解決方案是調查SBT源,如果很容易將此行為設置為單獨的任務。 必要的步驟可能與我的其他答案相同。

  1. update任務中提取參數sbt.ivy.home並為其提供參數化重載(如果可能的話)
  2. 定義新任務testDependencies 請參閱文檔
  3. 創建tempDirectory
  4. 調用更新(tempDirectory)
  5. 收集結果
  6. 刪除tempDirectory
  7. 促進結果
  8. 提供拉取請求;)或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
}

之后可以通過刪除目錄來擴展它。

我發現一個公認的簡單但也有點hacky,但仍然工作的解決方案。 如此處所述,您可以設置常春藤主目錄。 設置完成后,由於新的緩存目錄,它會激活系統上的sbt實例以更新所有依賴項。 當所有依賴關系都可以解決時,您可以檢查std輸出一些指示成功的字符串。 就像Done updating.一樣Done updating. 然后刪除臨時文件夾。 小心,從頭開始新的決心可能需要一段時間! ~5min 100mBit / s並使用SSD驅動器

我建議使用較少的系統侵入性選項來定義本地命令/終端會話中的環境變量SBT_OPTSsbt.ivy.home變量,而不是在系統范圍內定義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 ,退出代碼可以用於進一步處理。 請注意,上面的控制台輸出是使用interactive sbt命令生成的,使用非交互式sbt update命令生成類似的輸出。

現在有一個名為SBT臟錢的SBT插件,可以添加額外的功能來解決這個問題。 雖然您必須執行額外的命令。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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