在元构建级别上运行sbt命令

时间:2017-12-19 07:34:53

标签: sbt sbt-plugin

sbt允许我们在根项目级别运行sbt命令。

如何在元构建级别运行命令? (在root/project/project dir中定义)

我的用例是我的某些sbt插件具有相同依赖项的不同版本,并且旧的依赖项被逐出。我想研究使用sbt-dependency-graph

3 个答案:

答案 0 :(得分:2)

您可以使用主项目sbt会话中的reload plugins切换到构建项目的上下文:

sbt:root> reload plugins
[snip noise]

sbt:project> show libraryDependencies
[shows your sbt plugins from root/plugins.sbt along with their deps]

sbt:project> reload return
[back to the main project]

sbt:root>

作为Jorge noted,您可以在root/project/project/plugins.sbt的元构建中安装sbt-dependency-graph,以使其可用于reload plugins的构建项目上下文。与往常一样,回想一下sbt is recursive - 来自构建项目,您可以再次reload plugins 来达到元构建级别。例如,从那里show libraryDependencies仅显示来自root/project/project的sbt-dependency-graph。

在我看来,这是sbt用户体验的一个古怪方面,因为reload命令不是直观的,因为help reload命令将成为此功能的路径,但只要您能记住该部分, sbt为回忆子命令提供了一个很好的总结。

我不知道这是不是"错误"在任何方面,但我发现它比更改目录更方便,因为我不需要开始另一个{{1}}会话,并且可以来回移动或进一步递归而无需重新启动。

答案 1 :(得分:1)

执行此操作的正确方法是在root/project中运行sbt。你通常只是在root/上运行它,诀窍是进入project并在那里运行它。如果要检查元构建中已解析的库依赖项,可以在root/project/project/plugins.sbt中添加sbt依赖图插件(注意重复project),然后您应该能够运行{{ 1}}来自sbt shell。

答案 2 :(得分:0)

作为一种解决方法,我做了以下事情:

文件root/project/plugins.sbt中的

addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.8.2")

并在文件root/project/build.sbt中:

(compile in Compile) := {
  (dependencyBrowseGraph in Compile).value
  (compile in Compile).value
}

这会导致dependencyBrowseGraph任务在编译后运行。它解决了我的具体问题,但它不是很方便,所以很高兴听到正确的方法。