0

Ant 目标的 SBT 等效项(如果有)是多少?例如,Ant 的 build.xml 文件中的片段将是:

<target name="runClient" description="run client">
    <java classname="client.Client" fork="true">
        <jvmarg value="-Djava.rmi.server.codebase=${client_web_codebase}"/>
        <jvmarg value="-Djava.security.policy=policy"/>
        <arg value="localhost"/>
        <classpath>
            <pathelement location="dist/client.jar"/>
        </classpath>
    </java>
</target>

然后我会做一些事情,比如ant runClient使用 XML 中指定的 jvmargs 启动应用程序“client.Client”。是否有 SBT 等效项,或者 SBT 挂钩到 Ant 来执行此操作的方法?

4

1 回答 1

6

你可以使用Sbt Tasks来做到这一点。您定义的任务可以依赖于其他任务和/或设置(例如,您的项目基目录):

import sbt._
import Keys._

object TestBuild extends Build {
  lazy val runClient = TaskKey[Unit]("runClient", "run client")

  lazy val root = Project("Test", file("."),
    settings = Defaults.defaultSettings ++ Seq(
    runClient <<= baseDirectory map {
      base =>
        val clientWebCodebase = base / "yourpath"
        val opts = Seq("-Djava.rmi.server.codebase=" + clientWebCodebase,
          "-Djava.security.policy=policy",
          "-cp", "dist/client.jar",
          "client.Client", "localhost"
        )
        Fork.java.fork(None, opts, None, Map(), false, StdoutOutput)
      }
    )
  )
}

拥有这样的任务定义,您可以使用以下方式运行它:

sbt runClient

或在 sbt 外壳中:

>runClient

您甚至可以使用 Tab 补全:runC + tab :)

于 2012-10-11T21:33:32.773 回答