Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 使用sbt定义多个运行命令_Scala_Command_Sbt - Fatal编程技术网

Scala 使用sbt定义多个运行命令

Scala 使用sbt定义多个运行命令,scala,command,sbt,Scala,Command,Sbt,我使用的是sbt 0.13.5。我的项目中有几个子项目,特别是一个spray客户端和一个spray路由服务器。 我希望能够定义几个“run”命令,比如runClient和runServer。 对于每个子项目,我创建一个main类并在sbt文件中进行设置。 现在,我希望能够: -在不同的终端会话中启动多个sbt。 -在一个会话中,键入runClient -在另一个会话中,键入runServer。 在sbt中有没有合适的方法?我尝试将runServer定义为新命令: def runServer =

我使用的是sbt 0.13.5。我的项目中有几个子项目,特别是一个spray客户端和一个spray路由服务器。 我希望能够定义几个“run”命令,比如runClient和runServer。 对于每个子项目,我创建一个main类并在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”语句吗


谢谢。

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

不过有一个警告。
run
任务是一个输入任务,在引用它之前必须将其转换为普通任务

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


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

谢谢,我尝试过,但我遇到了一个sbt错误:
>runAMServer[error]不是有效的命令:runAMServer[error]不是有效的项目ID:runAMServer[error]预期的“:”(如果选择配置)[error]不是有效的键:runAMServer(类似:runner)[error]runAMServer
能否粘贴
项目的输出
并显示如何定义任务?这些是我的任务`val runAMTest=taskKey[Unit](“将AM服务器作为测试运行”)val runAMServer=taskKey[Unit](“运行AM服务器”)runAMServer:=(在修正点中编译运行)。toTask(“”)。value runTEEClient:=(在teeEndPoint中编译运行)。toTask(“”)。value``哦。我需要在根项目的设置中添加任务,对吗?@Joel yes,在根项目中。
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