sbt 允许我们在根项目级别运行 sbt 命令。
如何在元构建级别运行命令?(在root/project/project
目录中定义)
我的用例是我的一些 sbt 插件具有相同依赖项的不同版本,并且旧的依赖项被逐出。我想使用 sbt-dependency-graph 进行调查
sbt 允许我们在根项目级别运行 sbt 命令。
如何在元构建级别运行命令?(在root/project/project
目录中定义)
我的用例是我的一些 sbt 插件具有相同依赖项的不同版本,并且旧的依赖项被逐出。我想使用 sbt-dependency-graph 进行调查
您可以使用reload plugins
从主项目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>
正如Jorge所 指出的,您可以在 的元构建中安装 sbt-dependency-graphroot/project/project/plugins.sbt
以使其可用于reload plugins
. 和往常一样,回想一下sbt 是递归的——从构建项目中,您可以reload plugins
再次执行以达到元构建级别。例如,从那里show libraryDependencies
将仅显示来自 的 sbt-dependency-graph root/project/project
。
在我看来,这是 sbt UX 的一个古怪方面,因为reload
命令将成为此功能的路径并不完全直观,但只要您能记住该部分,就可以help reload
很好地总结调用子命令。
我不知道这是否是“错误”的方式,但我发现它比更改目录更方便,因为我不需要启动另一个sbt
会话,并且可以在不重新启动的情况下来回移动或进一步递归。
正确的方法是运行 sbt in root/project
。你通常只是运行它root/
,诀窍是 cd 进入project
并在那里运行它。如果要检查在元构建中解析的库依赖关系,可以在中添加 sbt 依赖关系图插件root/project/project/plugins.sbt
(注意 的重复project
),然后您应该能够dependencyBrowseGraph
从 sbt shell 运行。
作为一种解决方法,我做了以下事情:
在文件中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
任务在编译后运行。它解决了我的具体问题,但不是很方便,所以很高兴听到什么是正确的方法。