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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在元构建级别上运行sbt命令相关的知识,希望对你有一定的参考价值。

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

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

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

答案

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

另一答案

您可以使用主项目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 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 UX的一个古怪的方面,因为reload命令将是这个功能的路径并不完全直观,但只要你能记住那个部分,help reload就可以很好地总结回忆子命令。

我不知道这在任何方面是否是“错误的”方式,但我发现它比更改目录更方便,因为我不需要启动另一个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任务在编译后运行。它解决了我的具体问题,但它不是很方便,所以很高兴听到正确的方法。

以上是关于在元构建级别上运行sbt命令的主要内容,如果未能解决你的问题,请参考以下文章

即使在 cli 上间接指定了多次,如何让 sbt 只运行一次任务?

如何构建运行测试套件的 Maven 工件? “sbt 测试”如何工作?

如何在特定命令上运行任务?

如何设置 SBT 构建以在 Jenkins 测试失败时返回零退出代码?

sbt dist在终端中工作但不与Jenkins一起作为shell脚本

SBT将项目ID添加到多项目构建中的日志中