如何在未配置plugins.sbt时通过命令行运行sbt插件任务
如何运行包含未在
plugins.sbt中定义的插件所属任务的sbt构建? 在Maven中可以直接通过命令行指定插件坐标执行对应任务,无需提前在项目配置中声明插件,命令格式为:mvn groupId:artifactId:1.2.3:goal
例如执行依赖检查的示例命令:mvn org.owasp:dependency-check-maven:7.1.1:check
但在sbt中直接套用同类格式执行命令会触发报错,执行命令及报错信息如下:
$ sbt net.vonbuchholtz:sbt-dependency-check:4.1.0:check ... [error] Expected ID character [error] Not a valid command: net (similar: set, new, inspect) [error] Expected project ID [error] Expected configuration [error] Expected ':' [error] Expected key [error] Not a valid key: net (similar: test, name, run) [error] net.vonbuchholtz:sbt-dependency-check:4.1.0:check [error] ^
解答
sbt原生不支持Maven这种命令行直接拼接插件坐标调用任务的语法,要实现不修改项目plugins.sbt运行插件任务,有两种常用方案:
- 临时动态加载插件(单次生效,不改动项目配置)
sbt 1.3.0及以上版本支持通过JVM启动参数动态注入插件依赖,不需要提前在项目配置中声明插件,命令格式如下:
针对示例中的sbt-dependency-check 4.1.0插件,其绑定的任务名为sbt -Dplugin.<插件组织ID>#<插件artifacts名>=<插件版本> "<任务名>"dependencyCheck,可直接执行以下命令完成调用:
该方式加载的插件仅在本次sbt进程中生效,不会写入任何项目或全局配置文件,适合临时执行一次性插件任务的场景。sbt -Dplugin.net.vonbuchholtz#sbt-dependency-check=4.1.0 "dependencyCheck" - 全局配置常用插件(所有本地项目通用)
如果是高频使用的插件,可以配置到sbt全局插件目录,所有本地sbt项目无需单独声明即可直接调用插件任务:- 进入sbt全局插件目录,Linux/macOS路径为
~/.sbt/1.0/plugins/,Windows路径为C:\Users\<当前用户名>\.sbt\1.0\plugins\ - 在目录下新建或修改
plugins.sbt文件,加入对应插件的依赖声明:addSbtPlugin("net.vonbuchholtz" % "sbt-dependency-check" % "4.1.0") - 配置完成后,任意本地sbt项目都可以直接执行
sbt dependencyCheck调用该任务,不需要在项目自身的插件配置中重复添加。
- 进入sbt全局插件目录,Linux/macOS路径为
注意:sbt插件的任务名由插件自身定义,不会按照Maven的
goal规则自动拼接,使用前需要查阅对应插件的文档确认准确任务名,比如示例中依赖检查插件的任务名是dependencyCheck,而非check。如果使用sbt 1.3.0以下的旧版本,动态加载参数不生效,只能通过全局配置或临时修改项目project/plugins.sbt的方式加载插件。
内容的提问来源于stack exchange,提问作者user1053510
相关产品推荐
相关产品推荐

