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

SBT:在运行时向项目添加依赖项,sbt,sbt-assembly,Sbt,Sbt Assembly,有sbt项目声明 lazy val myProject = (Project("myProject", file("someRoot")) enablePlugins ... settings (...) 它有一个taskKey,用于提取文件系统的某些依赖项 我的问题是,在加载SBT时,我无法确定所有依赖项,只能在执行private命令Alias之后才能确定 addCommandAlias("resolveDependencies", "; resolveDependencie

有sbt项目声明

lazy val myProject = (Project("myProject", file("someRoot"))
    enablePlugins ...
    settings (...)
它有一个taskKey,用于提取文件系统的某些依赖项

我的问题是,在加载SBT时,我无法确定所有依赖项,只能在执行private命令Alias之后才能确定

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 yourcustommand
调用它


您从命令返回的状态实例将成为生成的新状态,即,如果您添加了一些依赖项,则生成将看到它们。

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

大致如下:

// 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 yourcustommand
调用它


从命令返回的状态实例将成为生成的新状态,即,如果添加了一些依赖项,则生成将看到它们。

我知道如何使用一组新设置执行某些特定任务。这是否可行,或者您需要为所有现有任务应用新设置?我可以尝试重新设计以重新加载任务,在单个任务范围内应该足够了。我知道如何使用一组新设置执行某些特定任务。这是否可行,或者您需要为所有现有任务应用新设置?我可以尝试重新设计以重新加载任务,在单个任务的范围内应该足够了