【问题标题】:Per-project tasks in SBTSBT 中的每个项目任务
【发布时间】:2019-01-28 22:00:05
【问题描述】:

我的 .sbt 文件如下所示:

lazy val common = (project in file("./common"))
  .settings(
    // other settings
  )
lazy val one = (project in file("./one"))
  .dependsOn(common)
  .settings(
    // other settings
    addCommandAlias("build", ";clean;assembly;foo")
  )
lazy val two = (project in file("./two"))
  .dependsOn(common)
  .settings(
    // other settings
    addCommandAlias("build", ";clean;compile;bar")
  )

此外,我还有两个任务 foobar 仅在各自的项目中有效。

我的测试表明,在调用 build 时 - 无论我在哪个项目中 - 都会调用两个别名。

对于任务,键只能在 .sbt 文件的顶层定义(例如val foo = taskKey[Unit]("Does foo"))。

我想知道如何在项目级别正确实现任务和命令别名。

这可能吗?

【问题讨论】:

    标签: scala sbt


    【解决方案1】:

    您遇到的问题是 sbt 中的别名。定义别名后,它以命令的形式附加到范围GlobalScope,因此可用于所有子项目。当您使用addCommandAlias 对别名进行多次定义时,最后一次执行会获胜,因为每次执行都会删除先前创建的同名别名。

    你可以通过运行sbt alias查看定义的别名,它会打印出只有一个build别名。

    您可以通过将build 引入taskKey 来实现分离

    lazy val build = taskKey[Unit]("Builds")
    
    lazy val root = (project in file("."))
      .aggregate(one, two) // THIS IS NEED TO MAKE build TASK AVAILABLE IN ROOT
    
    lazy val common = (project in file("./common"))
      .settings(
        //SOME KEYS
      )
    
    lazy val one = (project in file("./one"))
      .dependsOn(common)
      .settings(
        build := {
          Def.sequential(clean, Compile / compile).value
        }
      )
    
    lazy val two = (project in file("./two"))
      .dependsOn(common)
      .settings(
        build := {
          Def.sequential(clean, assembly).value
        }
      )
    

    编辑:在 cmets 中添加了 @laughedelic 建议的 Def.sequential

    【讨论】:

    • 啊,谢谢。当我在根项目中调用build 而不使用aggregate 时会发生什么? taskKey 已经定义,但它的行为不是......(?)
    • 它会说类似[error] Not a valid command: build
    • 你应该使用Def.sequential一个接一个地运行任务。检查scala-sbt.org/release/docs/Howto-Sequential-Task.html
    • @IvanStanislavciuc 所以我尝试了这种方法,但我仍然可以在根级别调用build...一旦遇到未定义的命令,它就会严重失败,但仍然...
    猜你喜欢
    • 2020-05-15
    • 1970-01-01
    • 2019-01-23
    • 1970-01-01
    • 2015-07-24
    • 2018-05-05
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    相关资源
    最近更新 更多