SBT:在运行时向项目添加依赖项

SBT: Add dependencies to project at runtime

有sbt项目申报

lazy val myProject = (Project("myProject", file("someRoot"))
    enablePlugins ...
    settings (...)

它有 taskKey 提取一些依赖文件系统。

我的问题是在加载 SBT 的那一刻我无法确定所有依赖项,只有在执行私有命令别名后才能确定

addCommandAlias("resolveDependencies", "; resolveDependenciesTask; TODO: update myProject dependencies and reload it")

有办法吗?

实际上,请忽略我对您问题的评论。您可以使用命令来修改构建的状态,因此在您 运行 它之后,它所做的更改将保留。

大致如下:

// in your build.sbt

commands += Command.command("yourCustomCommand")(state =>
  Project.extract(state).append(
    Seq(libraryDependencies += // settings you want to modify
      "com.lihaoyi" % "ammonite-repl" % "0.5.7" cross CrossVersion.full),
    state))

然后用sbt yourCustomCommand调用它。

您 return 从命令中获得的状态实例成为构建的新状态,即如果您添加了一些依赖项,构建将看到它们。