我的.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")
)
此外,我还有两个任务foo
和bar
,它们仅在各自的项目中有效。
我的测试表明,无论我在哪个项目中,调用build
时-两个别名都被调用。
对于任务,密钥只能已经在.sbt文件的顶级定义(例如val foo = taskKey[Unit]("Does foo")
)。
我想知道如何在项目级别正确实现任务和命令别名。
有可能吗?
答案 0 :(得分:2)
您遇到的问题是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
}
)
的分离。
Def.sequential
编辑:根据评论中@laughedelic的建议,添加了SELECT AVG (COUNT (PID))
FROM SOLD
GROUP BY DATE, PID;