使用sbt定义多个运行命令

时间:2014-07-20 14:15:48

标签: scala command sbt

我正在使用sbt 0.13.5。我的项目中有几个子项目,特别是喷雾客户端和喷雾路径服务器。 我希望能够定义几个“运行”命令,如runClient和runServer。 对于每个子项目,我创建一个mainClass并在sbt文件中进行设置。 现在,我希望能够: - 在不同的终端会话中启动几个sbt。 - 在一个会话中,键入runClient - 在另一个会话中,键入runServer。 在sbt中有没有正确的方法呢?我试图将runServer定义为一个新命令:

def runServer = Command.command("runServer") { state =>
    println("run Server")
    run in Compile in server
    state
}

def runClient = Command.command("runClient") { state =>
    println("run Client")
    run in Compile in client
    state
}

其中server是我的服务器项目。 我在项目的命令中添加了runServer:

lazy val root = Project(id = "myproject", base = file("."),
    settings = commands ++= Seq(runServer, runClient)
).aggregate(client, server)

在sbt中,如果我键入runServer,则println可以正常工作,但不会启动任何内容。 你知道怎么执行“run”语句吗?

感谢。

1 个答案:

答案 0 :(得分:1)

我认为你不得不诉诸命令来实现你想要的东西。简单的任务就足够了。

但有一点需要注意。 run任务是一个输入任务,您必须在引用它之前将其转换为正常任务。

build.sbt

val client, server = project

val runServer = taskKey[Unit]("Runs server")

val runClient = taskKey[Unit]("Runs client")

runClient := (run in Compile in client).toTask("args to the main class").value

runServer := (run in Compile in server).toTask("args to the main class").value

现在,您应该能够使用runServer和客户端runClient运行服务器。

另请注意,您可以使用server/runclient/run运行这两个命令,而无需使用自定义任务或命令。