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>

次に、XMLで指定されたjvmargsを使用してアプリケーション「client.Client」を起動したいと思いant runClientます。SBTに相当するもの、またはSBTがAntにフックしてこれを行う方法はありますか?

4

1 に答える 1

6

Sbtタスクを使用してそれを行うことができます。定義するタスクは、他のタスクや設定(プロジェクトのベースディレクトリなど)に依存する可能性があります。

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

タブ補完を使用することもできます:runC + tab :)

于 2012-10-11T21:33:32.773 に答える