如何测试sbt解析器

时间:2015-09-29 09:40:55

标签: scala sbt

在我的本地计算机上,我有一个常春藤缓存,已经通过处理多个项目来填充。

使用项目X中的解析程序Y加载库A。项目X中使用了相同的库B,解决此库没有问题,因为它在我的本地缓存中。

当我的一位同事加载项目B时,他会发现无法解析库X的错误。问题:解析器Y丢失了。

如何在不删除常春藤缓存的情况下测试我的sbt项目是否有一套完整的解析器来解析所有依赖项?

4 个答案:

答案 0 :(得分:2)

另一个更优雅的解决方案是调查SBT源,如果很容易将此行为设置为单独的任务。必要的步骤可以与my other answer中的步骤相同。

  1. 1.0.0-rc3任务中提取参数sbt.ivy.home并为其提供参数化重载(如果可行)
  2. 定义新任务testDependencies see documentation
  3. 创建tempDirectory
  4. 呼叫更新(tempDirectory)
  5. 收集结果
  6. 删除tempDirectory
  7. 推广结果
  8. 提供拉取请求;)或sbt插件

答案 1 :(得分:2)

此命令允许您查找是否缺少当前项目的任何更新。请注意,这不会发现插件的任何丢失的解析器。

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
}

之后可以通过删除目录来扩展它。

答案 2 :(得分:1)

我发现了一个简单但又有点hacky但仍然有效的解决方案。 As described here您可以设置常春藤主目录。 设置完成后,由于新的缓存目录,它会激活系统上的sbt实例以更新所有依赖项。 当所有依赖关系都可以解决时,您可以检查std输出一些指示成功的字符串。与Done updating.类似,然后删除temporal文件夹。 谨慎,从头开始的新决心可能需要一段时间! ~5min 100mBit / s并使用SSD驱动器

我建议使用较少的系统侵入性选项来定义环境变量sbt.ivy.home中的sbt.ivy.home变量,而不是在系统范围内定义SBT_OPTS变量并且有点不可移植。你的本地命令/终端会话。在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命令生成类似的输出。

答案 3 :(得分:1)

现在有一个名为SBT dirty money的SBT插件,可以添加额外的功能来解决这个问题。虽然你必须执行额外的命令。