我正在使用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”语句吗?
感谢。
答案 0 :(得分:1)
我认为你不得不诉诸命令来实现你想要的东西。简单的任务就足够了。
但有一点需要注意。 run
任务是一个输入任务,您必须在引用它之前将其转换为正常任务。
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/run
和client/run
运行这两个命令,而无需使用自定义任务或命令。