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

在元构建级别上运行sbt命令,sbt,sbt-plugin,Sbt,Sbt Plugin,sbt允许我们在根项目级别上运行sbt命令 如何在元构建级别上运行命令? (在root/project/projectdir中定义) 我的使用案例是,我的一些sbt插件具有相同依赖项的不同版本,旧的依赖项被逐出。我想研究使用sbt依赖关系图作为解决方法,我做了以下工作: 在文件root/project/plugins.sbt中: addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.8.2") 在文件root/project

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

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


我的使用案例是,我的一些sbt插件具有相同依赖项的不同版本,旧的依赖项被逐出。我想研究使用sbt依赖关系图作为解决方法,我做了以下工作:

在文件
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
任务。它可以解决我的具体问题,但它不是很方便,所以听到什么是正确的方法会很好

正确的方法是在
root/project
中运行sbt。通常只需在
root/
上运行它,诀窍是将cd放入
project
并在那里运行它。如果要检查元构建中解析的库依赖项,可以在
root/project/project/plugins.sbt
(注意重复
project
)中添加sbt依赖关系图插件,然后您应该能够从sbt shell运行
dependencyBrowseGraph

您可以从主项目
sbt
会话切换到构建项目的上下文:

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>
同样,您可以在
root/project/project/plugins.sbt
的元构建中安装sbt依赖关系图,以使其可用于
reload plugins
的构建项目上下文。像往常一样,回想一下-在构建项目中,您可以再次执行
重新加载插件
以达到元构建级别。例如,从那里
show library dependencies
将仅显示
root/project/project
中的sbt依赖关系图

在我看来,这是sbt UX的一个奇怪方面,因为
reload
命令将是该功能的路径这一点并不直观,但只要您还记得这一部分,
help reload
为调用子命令提供了一个很好的总结

我不知道这在任何方面是否是“错误”的方式,但我发现它比更改目录更方便,因为我不需要启动另一个
sbt
会话,并且可以在不重新启动的情况下来回移动或进一步递归